Дружественные функции и классы

Это функции, не являющиеся членами класса, но которым разрешен доступ ко всем членам класса (элитная группа с привилегиями).

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

class complex {…

friend my_func(complex&);

friend another_class::method(complex&, int);

Если все методы какого-то класса должны иметь доступ к скрытым полям другого, то весь такой класс можно объявить дружественным:

Friend class another_class;

Дружественная функция опредеяется вне класса.

Использование стража включения

Для предотвращения ошибок, связанных с повторным описанием класса, логично обрамлять описанеи класса стражем включения:

#ifndef__Point2D_defined__

#define__Point2D_defined__class Point 2D{…};

#endif

25. КОНСТРУКТОРЫ И ДЕСТРУКТОРЫ КЛАССОВ

Конструкторы. Назначение конструкторов.

Конструктор класса – функция-член этого класса, которая всегда вызывается компилятором после создания объекта класса. В конструкторе можно использовать данные-члены и функции-члены класса, а также указатель this.

Конструкторы должны быть:

1)совпадающими по имени с именем класса

2)без возвращаемого значения (не установлен тип возвращаемого значения)

3)без наследования

4)без модификаторов доступа const, volatite, virtual, static

5)может быть как внутренним, так и внешним методом

6)за счёт механизма перегрузки может быть создано несколько конструкторов, различающихся набором параметров

7)если ни одного конструктора не написано, реализуется так называемый конструктор по умолчанию без параметров. Этот конструктор не выполняет никаких дополнительный действий.

Class Point{

private: double x,y;

public:

Point(); //конструктор без параметров, который сбросит точку в начале подпрограммы (???)

Point(double,double); //конструктор, который в качетстве параметров передаёт координаты точек.

Point::Point() {x=0;y=0;}

Point::Point(double ax, double ay) {x=ax; y=ay;}

За счёт использования параметров по умолчанию можно обойтись одним конструктором:

class Point{

Point (double=0,double=0);

};

Конструктор по умолчанию

Конструктором по умолчанию называется конструктор, который можно определить 2 способами:

1)без параметров

2)со списком параметров, где все параметры имеют значения по умолчанию.

Класс может иметь только один конструктор по умолчанию. Такой конструктор только создаёт объект и вызывает конструкторы по умолчанию для вложения обеъктов и конструктор по умолчанию для базового класса (если такой существует)

Если класс имеет хотя бы один конструктор, то конструктор по умолчанию ……..

В разделе private можно помещать функции. Если в раздел private поместить конструктор, то нельзя будет объявить ни одного объекта этого класса.

Конструктор копирования

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

complex c4=c2;

Такой конструктор получает в качестве параметра ссылку, обычно константную, на объект того же класса:

complex::complex(const complex& C)

{

Re = C.Re;

Im = C.Im;

}

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

Конструктор копирования вызывается:

1)при создании нового объекта с инициализацией существующего объекта.

2)при передаче в функцию объекта по значению

3)при выходе из функции, возвращающей объект

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

Наши рекомендации