Типы конструкторов

Содержание

Слайд 2

Конструктор без параметров – конструктор по умолчанию (default constructor) Если не

Конструктор без параметров – конструктор по умолчанию (default constructor)
Если не

объявить явно – компилятор автоматически встраивает в программу. Какими значениями инициализируются поля неизвестно.
Если важно, какими значениями инициализируются поля – объявить явно:
class MyClass {
int a,b;
public:
MyClass(): a(0), b(1) //инициализация константными
// значениями
{ }

Конструктор c параметрами – конструктор инициализации (initialized constructor)
Слайд 3

Конструкторы с параметрами Конструктор c параметрами – конструктор инициализации (initialized constructor)

Конструкторы с параметрами

Конструктор c параметрами – конструктор инициализации (initialized constructor)
class

MyClass {
int a,b;
public:
MyClass(int ax, int bx): a(ax), b(bx) //инициализация
//полей значениями, передаваемыми конструктору в
// качестве аргументов
{ }
Слайд 4

Перегруженные конструкторы class MyClass { int a,b; public: MyClass(): a(0), b(1)

Перегруженные конструкторы
class MyClass {
int a,b;
public:
MyClass(): a(0), b(1)

{ }
MyClass(int ax, int bx): a(ax), b(bx)
{ }
};
Слайд 5

Пример №9 (дополнение примера 8) class Queue{ protected: int id; int

Пример №9 (дополнение примера 8)

class Queue{
protected:
int id;
int q[100];

int bq, endq;

public:
Queue (void); // конструктор
Queue (int i); //к-р с параметром
~ Queue (void); // деструктор
void qput(int m);
int qget(void);
};

public:
Queue (void); // конструктор
~ Queue (void); // деструктор
void qput(int m);
int qget(void);
};

Queue::Queue (void)
{ bq=endq=0; id=0;
cout<<“Очередь инициализирована\n”;
}

Queue::~Queue (void)
{ cout<<“Очередь “<

Queue::Queue (int i)
{
bq=endq=0; id=i;
cout<<“Конструктор”<}

int Queue::qget(void)
{ if (endq==bq) {
cout<<“Очередь пустая\n”;
return 0;}
return q[bq++];
}
void Queue::qput(int m)
{ if (endq==100) {
cout<<“Очередь полна\n”;
return;}
q[endq++]=m;
}

Слайд 6

Пример №9 (продолжение) Конструктор 101 Конструктор 102 Конструктор 0 - ???

Пример №9 (продолжение)

Конструктор 101

Конструктор 102

Конструктор 0 - ???

10 25 300

Очередь 0

разрушена

Очередь 102 разрушена

Очередь 101 разрушена

int main()
{
Queue a(101), b(102), c;

a.qput(10);
b.qput(25);
c.qput(300);
cout<cout<cout<return 0;
}

Слайд 7

Пример №9 (продолжение)

Пример №9 (продолжение)

Слайд 8

Пример №9 (продолжение)

Пример №9 (продолжение)

Слайд 9

Пример №9 (продолжение)

Пример №9 (продолжение)

Слайд 10

Пример №9 (продолжение)

Пример №9 (продолжение)

Слайд 11

Пример №9 (продолжение)

Пример №9 (продолжение)

Слайд 12

Конструкторы с параметрами при наследовании class X (поле x) class Z

Конструкторы с параметрами при наследовании

class X (поле x)

class Z (поле z

для хранения суммы x и y)

class Y (поле у)

Слайд 13

Конструкторы с параметрами при наследовании. Пример №10 X::X(int i) { x=i;

Конструкторы с параметрами при наследовании. Пример №10

X::X(int i)
{ x=i; cout<<“Конструктор

X\n”; }

Y::Y(int i, int j):X(i)
{ y=j; cout<<“Конструктор Y\n”; }

Z::Z(int i, int j):Y(i,j)
{ cout<<“Конструктор Z\n”; }

Конструктор класса Y передаёт значение первого параметра конструктору класса X.

Конструктор класса Z передаёт значения параметров конструктору класса Y.

class Y: public X{
protected:
int y;
public:
Y(int i, int j); //к-р с параметрами
~ Y (void); // деструктор

};

class Z: public Y{
protected:
int z;
public:
Z(int i, int j); //к-р с параметрами
~ Z (void); // деструктор
void make_z(void) {z=x*y;};
void Show(void) { cout<};

Слайд 14

Конструкторы с параметрами при наследовании. Пример №10 X::X(int i) { x=i;

Конструкторы с параметрами при наследовании. Пример №10

X::X(int i)
{ x=i; cout<<“Конструктор

X\n”; }

Y::Y(int i, int j):X(i)
{ y=j; cout<<“Конструктор Y\n”; }

Z::Z(int i, int j):Y(i,j)
{ cout<<“Конструктор Z\n”; }

Конструктор класса Y передаёт значение первого параметра конструктору класса X.

Конструктор класса Z передаёт значения параметров конструктору класса Y.

class Y: public X{
protected:
int y;
public:
Y(int i, int j); //к-р с параметрами
~ Y (void); // деструктор
void put_y(int i) {y=i;};
int get_y(void) {return y;};]
void Show(void) { cout<};

class Z: public Y{
protected:
int z;
public:
Z(int i, int j); //к-р с параметрами
~ Z (void); // деструктор
void make_z(void) {z=x*y;};
void Show(void) { cout<};

Слайд 15

Пример №10 (продолжение) Конструктор X Конструктор Y Конструктор Z 15 3

Пример №10 (продолжение)

Конструктор X

Конструктор Y

Конструктор Z

15
3
5

Деструктор Z

Деструктор Y

Деструктор

X

63
7
9

Слайд 16

Пример // работает конструктор с параметром (инициализации) A(int i) // работает

Пример

// работает конструктор с параметром (инициализации) A(int i)

// работает конструктор без

параметров
(по умолчанию) A()

работает конструктор с параметром
(инициализации) B(int j)

error C2512: 'B' : no appropriate default constructor available
36 no matching function for call to `B::B()'

запускается без ошибки, объект не создался

error C2228: left of '.y' must have class/struct/union

Слайд 17