Этот конструктор не имеет параметров

Void shownumber (void)

{cout << a <<b <<c; };

};

mag one; // объектинициализируется значениями 1, 2,3

mag one1 (10); // объектинициализируется значениями 10, 2,3

mag one2 (10,20); // объектинициализируется значениями 10, 20,3

mag one3 (10,20,30) // объектинициализируется значениями 10, 20,30

Не обязательно иметь умалчиваемое значение для всех параметров, при этом параметры, не подлежащие инициализации умалчиваемыми значениями должны располагаться в начале списка, подлежащие – в конце этого списка.

Men (char*n, int a=0) { name = n; age = a; }

Men (char*n = “ “, int a) { name = n; age = a; } // ошибка!

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

Это разновидность конструктора без параметров (присутствует в классе в единственном экземпляре).

Присутствует, когда надо единообразно инициализировать данные, или инициализирующие действия вообще не связаны с данными.

class A {

int x, y;

public:

A ();

...

};

A:: A () // невстроенный конструктор по умолчанию

{ x =0; y = 0; // инициализация данных, может отсутствовать

... // другие инициализирующие действия

}

/* мог бы быть просто такой:

A:: A () { } */

При наличии конструктора по умолчанию, предложение

A one;

создает объект со значениями данных x=0 и y=0.

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

Конструктор по умолчанию схож при вызове с конструктором с умалчиваемыми значениями и при написании конструкции:

< Имя класса> < имя объекта>;

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

При наличии в классе конструктора с параметрами, задаваемыми по умолчанию, объявлять конструктор по умолчанию нельзя!

Если в определении класса вообще нет конструктора, компилятор автоматически предоставляет конструктор по умолчанию следующего вида:

< Имя класса> () { }

который и создает неинициализированные объекты.

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

Назначение:

1) создать объект полностью совпадающий с уже созданным;

2) передача в некоторую функцию экземпляра класса, при этом в стеке создается локальная копия объекта, с которым и работает функция;

3) функция передает в некоторую переменную объект класса, фактически этот объект сначала создается в функции как локальная переменная, и лишь затем копируется в переменную, стоящую в левой части выражения.

Операции копирования объектов выполняет конструктор копирования.

В большинстве случаев компилятор предоставляет нам конструктор копирования по умолчанию, обеспечивая правильное копирование.

Копирование по умолчанию:

class T {

int x, y;

public:

T (int tx, int ty) { x = tx; y = ty; }

int GetX () { return x; }

int GetY () { return y; }

friend T sum (T, T);

};

void Print (T obj)

{ cout<<’\n’<<”x=”<<obj.GetX() <<” y=”<<obj.GetY(); }


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: