Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Иерархия классов.docx
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
42.95 Кб
Скачать

Передача объектов как аргументов функций

При передачи в качестве параметра функции по значению объекта некоторого класса, как и при передачи простой переменной, произойдёт создание копии объекта. Это может привести к побочным эффектам, особенно если конструктор динамически выделяет память.

Побочный эффект может быть, если объект содержит в себе некоторый указатель на динамическую область памяти. Тогда копия указывает на ту же область. Как только вызовется деструктор копии, то область памяти, на которую указывал объект-оригинал, освободится, что может привести к разрушению исходного объекта.

Использование объекта в качестве возвращаемого значения.

Для того, чтобы функция могла возвращать объект, нужно:

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; }

};

По значению: создаётся копия переменной, сама переменная не изменяется.

По указателю: копируется только указатель.

По ссылке: передаётся адрес переменной, используемый в качестве аргумента; внутри функции компилятор использует саму переменную ( а не копию!), на которую ссылается параметр- ссылка.