Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций ООПро.doc
Скачиваний:
43
Добавлен:
13.04.2015
Размер:
431.62 Кб
Скачать

Эффективные типы, определяемые пользователем

Для типа, определяемого пользователем, характерен набор операций:

  1. Конструктор, определяющий, как должны быть проинициализированы объекты данного типа.

  2. Набор функций доступа (функций-селекторов). Эти функции имеют модификатор const, который указывает, что они не должны изменять состояние объектов, для которых они вызваны.

  3. Набор функций-модификаторов. При их использовании не возникает необходимости разбираться в деталях представления или долго думать о смысле того или иного члена данных.

  4. Кроме того, у класса может быть набор функций, связанных с ним, но не требующих определения в классе, потому что они не нуждаются в непосредственном доступе к представлению.

  5. Перегруженные операторы – функции, обеспечивающие привычную (удобную) форму записи.

class complex{

public:

complex(double re=0,double im=0)

:_re(re),_im(im){}

double real()const{return _re;}

double imag()const{return _im;}

void add(complex);

private:

double _re,_im;

};

complex plus(complex a, complex b);

void print(complex a);

bool operator==(complex a, complex b);//перегруженный оператор

Способы использования объектов

Объект может быть создан в качестве:

  1. Именованного автоматического объекта, создаваемого каждый раз, когда встречается его объявление во время выполнения программы и уничтожаемого при каждом выходе из блока, в котором он объявлен.

void f(complex c){complex c1(2,3);}

  1. Объекта в свободной памяти, создаваемого при помощи оператора newи уничтожаемого операторомdelete.

complex *pc=new complex(2,3);

  1. Нестатического члена-объекта, который создается и уничтожается тогда, когда создается и уничтожается содержащий его объект.

class X{

complex _c;

stack _s;

public:

X(complex &)

};

Аргументы конструкторов-членов указываются в списке инициализации членов в определении конструктора объемлющего класса.

X::X(complex &c)

:_c(c),_s(100)//список инициализации

{}

Конструкторы членов вызываются до вызова тела конструктора самого класса. Если объект-член не нуждается в аргументах, его можно не указывать в списке инициализации.

  1. Элемента массива, который создается и уничтожается тогда, когда и создается и уничтожается массив, элементом которого он является.

complex cmas[10];

Вызывается конструктор по умолчанию для каждого элемента массива.

  1. Локального статического объекта, который создается, когда его объявление встречается первый раз при выполнении программы и уничтожается один раз, при завершении программы.

{static complex c=sin(3);}

  1. Глобального объекта, объекта в пространстве имен или статического объекта класса, которые создаются один раз «во время запуска программы» и уничтожаются один раз, при ее завершении.

complex c(1,0);

  1. Временного объекта, который создается как часть вычисления выражения и уничтожается по завершении вычисления всего выражения.

k=plus(c1,complex(1,2)).imag(); return c1;

  1. Объекта, размещенного в определенной области памяти.

  2. Члена объединения union, который не может иметь ни конструктора, ни деструктора.

union economy{ rec c; double d};