взлом

Открытая медицинская библиотека

Статьи и лекции по медицине ✚ Библиотека студента-медика ✚ Болезни и способы их лечения.

Хирургия Elseif isa(a,'polynom')
просмотров - 319

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]);