. Параметризованные конструкторы

. Параметризованные конструкторы

Конструктору можно передать параметры(аргументы). Для этого достаточно добавить параметры, как любой другой функции. Общая форма передачи:

ярлык_класса         объект(список_аргументов)

 

Вопрос 18. Дружественные функции

Разрешить обычной функции, или функции-элементу другого класса доступ к элементам класса, объявленных protected или public, можно с помощью friend в описании класса.

class myclass

{ friend void another_class::member(int);

  friend void func_name(float);

Правила:

1)    наописание friend невлияет public, protected и private.

2)    описания friend не взаимны: если А объявляет В другом, то это не означает, что A является другом для B;

3)    дружественность не наследуется: если А объявляет В другом, классы, производные от В, не будут автоматически получать доступ к элементам А;

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

 

Вопрос 19. Inline-функции

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

inline объявление_функции;

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

 

 

Вопрос 20. Передача объектов в функции

Объекты могут быть переданы в функцию тем же способом, что и переменные любого другого типа. Объекты передаются функции с использованием стандартного механизма передачи по значению. Это означает, что создается копия объекта, которая и передается в функцию, т.е. создается новый объект. ВНИМАНИЕ: при передачи параметра объекта в функцию конструктор не вызывается, но вызывается деструктор при уничтожении копии. Решение – конструктор копирования.

 

Вопрос 20,5. Конструктор копирования

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

имя_класса (const имя_класса &o){ …}

 

Вопрос 21. Возвращение объектов

Функция может возвращать объекты в точку вызова. Когда функция возвращает объект, автоматически создается временный объект, содержащий возвращаемое значение. После того, как значение возвращено, этот объект уничтожается. Уничтожение временного объекта может вызвать неожиданные побочные эффекты. Решение – использовать перегруженный оператор присваивания и определить конструктор копирования.


Ссылка на основную публикацию
Adblock detector