
- •2)Иерархия классов.
- •3)Методы (правила).
- •4)Порядок вызова методов.
- •5)Основные принципы ооп.
- •6)Пример использования указателя this.
- •7.8) Директивы Private, Public, Protected.
- •9)Статические методы.
- •10)Виртуальные методы.
- •12) Совместимость классов.
- •16)Указатель на объект. Операции динамического выделения памяти.
- •17)Чистые виртуальные функции. Абстрактные классы
- •Передача объектов как аргументов функций
- •Использование объекта в качестве возвращаемого значения.
Передача объектов как аргументов функций
При передачи в качестве параметра функции по значению объекта некоторого класса, как и при передачи простой переменной, произойдёт создание копии объекта. Это может привести к побочным эффектам, особенно если конструктор динамически выделяет память.
Побочный эффект может быть, если объект содержит в себе некоторый указатель на динамическую область памяти. Тогда копия указывает на ту же область. Как только вызовется деструктор копии, то область памяти, на которую указывал объект-оригинал, освободится, что может привести к разрушению исходного объекта.
Использование объекта в качестве возвращаемого значения.
Для того, чтобы функция могла возвращать объект, нужно:
1)Объявить функцию с возвращаемым значением типа класса;
2)Возвращать объект с помощью обычного оператора return.
Если возвращаемый объект содержит деструктор, то возникают похожие проблемы, связанные с «неожиданным» разрушением объекта.
23) Указатели и ссылки на объекты.
Инициализация:
int a = 11; // переменной
int * p = a; // указателя
int ref = a; // { ссылки обязательно!
Обращение:
cout << a;
cout << * p;
cout << ref;
Замечания:
1. Синтаксис обращения к переменной по ссылке ничем не отличается от синтаксиса обращения к переменной напрямую.
2. Ссылку после инициализации изменить нельзя. Все обращения к ссылке будут относиться к переменной, именем которой она была проинициализирована.
3. Наиболее важное использование ссылки – передача её в качестве параметра.
Параметры в функцию можно передать несколькими способами:
- по значению;
- по указателю;
- по ссылке.
H-p, class MyCl {
int;
public
void f1 ( int ) // по значению
{ x = i; }
void f2 ( int * i ) // по указателю
{ x = * i; }
void f3 ( int & i) // по ссылке
{ x =i; }
};
По значению: создаётся копия переменной, сама переменная не изменяется.
По указателю: копируется только указатель.
По ссылке: передаётся адрес переменной, используемый в качестве аргумента; внутри функции компилятор использует саму переменную ( а не копию!), на которую ссылается параметр- ссылка.