Категории
Хирургия
Elseif isa(a,'polynom') просмотров - 356
p = a;
Else
p.c = a(:).';
p = class(p,'polynom');
End
Данный конструктор создает полином из заданного вектора, содержащего коэффициенты полинома при убывающих степенях x. В случае если же в конструктор не передавать никакого аргумента͵ то будет создан "пустой" полином.
Сначала в конструкторе проверяется количество аргументов, и если оно равно нулю, то создается пустой полином. Точнее, создается структура p, содержащая единственное поле c, ĸᴏᴛᴏᴩᴏᴇ и будет содержать пустой вектор коэффициентов полинома. Затем из этой структуры конструируется сам объект при помощи встроенной функции class(). У этой функции есть два обязательных параметра. Первый - структура, которая будет представлять данные объекта͵ а второй - текстовая строка, содержащая имя создаваемого класса. Оно должно совпадать с именем конструктора и папки, его содержащей (с добавлением символа '@' в начале имени папки).
В случае если при вызове конструктора аргумент был задан, то проверяется тип этого аргумента. В том случае, когда был задан объект того же класса (так называемый copy-constructor), создается его копия при помощи оператора присваивания. Проверка класса переданного объекта осуществляется по его имени, при помощи функции isa() (является).
Наконец, если передан был обычный массив, то он копируется в поле p.c создаваемой структуры и, затем, из нее конструируется объект класса аналогично тому, как и в первом случае.
Подобная последовательность действий является обязательной для конструктора объектов. Естественно, структура, хранящая данные объекта͵ может быть создана сколь угодно сложной - с произвольным набором полей.
Отметим, что за пределами методов данного класса, функциями class() и isa() тоже можно активно пользоваться. В этом случае, первая из них может принять только один аргумент - объект и возвращает текстовую строку - имя класса заданного объекта. К примеру, для заданного вещественного вектора эта функция вернет строку 'double'.
Часто бывает крайне важно преобразовать объект одного класса к другому классу. К примеру, может понужнобиться преобразовать созданный нами полином обратно в вектор его коэффициентов. Чтобы обеспечить такую возможность, нужно создать для исходного класса (полинома в нашем примере) специальную функцию-конвертор. Имя этой функции (и имя ее m-файла) должно совпадать с именем класса, к которому она будет преобразовывать исходный объект. Стоит сказать, что для нашего примера понужнобиться следующая функция :
function c = double(p)
%@polynom/double.m.
c = p.c;
Теперь, в сессии MATLAB мы можем преобразовывать вектора в полиномы и обратно:
" P = polynom([1 -2 7]);