
- •Конспект лекций по курсу «Объектно-ориентированное программирование»
- •1. Введение
- •Эффективные типы, определяемые пользователем
- •Копирование объектов класса
- •Перегрузка операторов
- •Дружественные функции
- •Наследование
- •Виртуальные функции
- •Абстрактные классы
- •Включение
- •Шаблоны
- •Стандартная библиотека
Эффективные типы, определяемые пользователем
Для типа, определяемого пользователем, характерен набор операций:
Конструктор, определяющий, как должны быть проинициализированы объекты данного типа.
Набор функций доступа (функций-селекторов). Эти функции имеют модификатор const, который указывает, что они не должны изменять состояние объектов, для которых они вызваны.
Набор функций-модификаторов. При их использовании не возникает необходимости разбираться в деталях представления или долго думать о смысле того или иного члена данных.
Кроме того, у класса может быть набор функций, связанных с ним, но не требующих определения в классе, потому что они не нуждаются в непосредственном доступе к представлению.
Перегруженные операторы – функции, обеспечивающие привычную (удобную) форму записи.
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);//перегруженный оператор
Способы использования объектов
Объект может быть создан в качестве:
Именованного автоматического объекта, создаваемого каждый раз, когда встречается его объявление во время выполнения программы и уничтожаемого при каждом выходе из блока, в котором он объявлен.
void f(complex c){complex c1(2,3);}
Объекта в свободной памяти, создаваемого при помощи оператора newи уничтожаемого операторомdelete.
complex *pc=new complex(2,3);
Нестатического члена-объекта, который создается и уничтожается тогда, когда создается и уничтожается содержащий его объект.
class X{
complex _c;
stack _s;
public:
X(complex &)
};
Аргументы конструкторов-членов указываются в списке инициализации членов в определении конструктора объемлющего класса.
X::X(complex &c)
:_c(c),_s(100)//список инициализации
{}
Конструкторы членов вызываются до вызова тела конструктора самого класса. Если объект-член не нуждается в аргументах, его можно не указывать в списке инициализации.
Элемента массива, который создается и уничтожается тогда, когда и создается и уничтожается массив, элементом которого он является.
complex cmas[10];
Вызывается конструктор по умолчанию для каждого элемента массива.
Локального статического объекта, который создается, когда его объявление встречается первый раз при выполнении программы и уничтожается один раз, при завершении программы.
{static complex c=sin(3);}
Глобального объекта, объекта в пространстве имен или статического объекта класса, которые создаются один раз «во время запуска программы» и уничтожаются один раз, при ее завершении.
complex c(1,0);
Временного объекта, который создается как часть вычисления выражения и уничтожается по завершении вычисления всего выражения.
k=plus(c1,complex(1,2)).imag(); return c1;
Объекта, размещенного в определенной области памяти.
Члена объединения union, который не может иметь ни конструктора, ни деструктора.
union economy{ rec c; double d};