Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
С++_навч_пос14_new.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.86 Mб
Скачать

3.6 Конструктор копіювання

#include <iostream.h>

class A//клас A

{

int a;

public:

//перевантажені конструктори

A(int inita);//конструктор

A(A&);//конструктор копіювання

void print()

{cout<<a<<endl;}

};

A::A(int inita)//визначення конструктора

{a=inita;}

A::A(A &obj)//визначення конструктора копіювання

{a=obj.a;}

void main()

{

A obj1(3);//створення об’єкту obj1 і виклик конструктора

A obj2=obj1;//створення об’єкту obj2 і виклик конструктора копіювання

obj2.print();

}

3.7 Динамічне створення об’єктів типу класу

#include <iostream.h>

//клас A

class A

{

//закриті члени

int a;

int b;

//відкриті члени

public:

A(int inita, int initb);//конструктор (метод)

int sum()//метод

{

int c=a+b;

return c;

}

};

//визначення конструктора A класу A

A::A(int inita, int initb)

{

//присвоїти закритим полям значення параметрів

a=inita;

b=initb;

}

void main()

{

//статично створити об’єкт obj1, викликати конструктор

A obj1(2,3);

cout<<obj1.sum()<<endl;//виклик методу sum

//динамічно виділити пам’ять для об’єкту типу A, викликати конструктор

//вказівник pobj вказує на цю пам’ять

A *pobj =new A(4,5);

cout<<pobj->sum()<<endl;//виклик методу sum

delete pobj;//вивільнити пам’ять для pobj

cout<<pobj->sum()<<endl;//помилка!

}

3.8 Вкладені класи (1)

#include <stdio.h>

class A//клас A

{

class B//вкладений у клас A клас B

{

int b;

public:

B(int initb):b(initb){};

void print();//метод класу B

};

public://відкриті члени класу A

B objb;//поле objb типу B

A(B initobjb):objb(initobjb){};

void print()//метод класу A

{printf("%d\n",objb);}

};

//визначення методу вкладеного класу B

void A::B::print()

{printf("%d\n",b);}

void main()

{

A obj(5);//створення об’єкту obj і ініціалізація поля b

obj.print();//виклик методу print() класу A

obj.objb.print();//виклик методу print() вкладеного класу B

}

3.9 Вкладені класи (2)

#include <stdio.h>

class B//клас B

{

int b;

public:

B(int initb):b(initb){};

};

class A//клас A

{

B objb;//поле objb типу B

public:

A(B initobjb):objb(initobjb){};

void print()

{printf("%d\n",objb);}

};

void main()

{

A obj(5);//створення об’єкту obj і ініціалізація поля b

obj.print();//виклик методу print() класу A

}

3.10 Вкладені класи (3)

#include <stdio.h>

class B//клас B

{

int b;//поле b типу int

public:

B(int initb):b(initb){};

void print(){printf("%d\n",b);}//метод класу B

};

class A//клас A

{

public:

B objb;//поле objb типу B

A(B initobjb):objb(initobjb){};

void print(){printf("%d\n",objb);}//метод класу A

};

void main()

{

B obj1(5);//створення об’єкту obj1 і ініціалізація поля b

A obj(obj1);//створення об’єкту obj і ініціалізація поля objb

obj.print();//виклик методу print() класу A

obj.objb.print();//виклик методу print() класу B

}

3.11 Вкладені класи (4)

#include <iostream.h>

class B//клас B

{

int b,c;//поля b і c типу int

public:

//метод для ініціалізації закритих полів b і c

void set(int sb,int sc){b=sb; c=sc;}

void print(){cout<<b<<" "<<c<<endl;}

};

class A//клас A

{

public:

B objb;//поле objb типу B

A(int ib, int ic);

};

A::A(int ib, int ic)//визначення конструктора класу A

{objb.set(ib,ic);}

void main()

{

A obj(5,7);//створення об’єкту obj і ініціалізація полів b,c поля objb

obj.objb.print();

}

3.12 Вкладені класи (5)

#include <iostream.h>

class B//клас B

{

int b,c;//поля b і c типу int

public:

B(int initb,int initc):b(initb),c(initc){};//конструктор класу B

void print(){cout<<b<<" "<<c<<endl;}

};

class A//клас A

{

public:

B objb;//поле objb типу B

A(int ib, int ic):objb(ib,ic){};//конструктор класу A

};

void main()

{

A obj(5,7);//створення об’єкту obj і ініціалізація полів b,c поля objb

obj.objb.print();

}