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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



#include <iostream.h>//клас Aclass 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;//виклик методу sumdelete pobj;//вивільнити пам’ять для pobjcout<<pobj->sum()<<endl;//помилка!}

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

#include <stdio.h>class A//клас A{class B//вкладений у клас A клас B{int b;public:B(int initb):b(initb){};void print();//метод класу B};public://відкриті члени класу AB objb;//поле objb типу BA(B initobjb):objb(initobjb){};void print()//метод класу A{printf("%d\n",objb);}};//визначення методу вкладеного класу Bvoid A::B::print(){printf("%d\n",b);}void main(){A obj(5);//створення об’єкту obj і ініціалізація поля b obj.print();//виклик методу print() класу Aobj.objb.print();//виклик методу print() вкладеного класу B}

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

#include <stdio.h>class B//клас B{int b;public:B(int initb):b(initb){};};class A//клас A{B objb;//поле objb типу Bpublic:A(B initobjb):objb(initobjb){};void print(){printf("%d\n",objb);}};void main(){A obj(5);//створення об’єкту obj і ініціалізація поля bobj.print();//виклик методу print() класу A}

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

#include <stdio.h>class B//клас B{int b;//поле b типу intpublic:B(int initb):b(initb){};void print(){printf("%d\n",b);}//метод класу B};class A//клас A{public:B objb;//поле objb типу BA(B initobjb):objb(initobjb){};void print(){printf("%d\n",objb);}//метод класу A};void main(){B obj1(5);//створення об’єкту obj1 і ініціалізація поля bA obj(obj1);//створення об’єкту obj і ініціалізація поля objbobj.print();//виклик методу print() класу Aobj.objb.print();//виклик методу print() класу B}

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

#include <iostream.h>class B//клас B{int b,c;//поля b і c типу intpublic://метод для ініціалізації закритих полів b і cvoid set(int sb,int sc){b=sb; c=sc;}void print(){cout<<b<<" "<<c<<endl;}};class A//клас A{public:B objb;//поле objb типу BA(int ib, int ic);};A::A(int ib, int ic)//визначення конструктора класу A{objb.set(ib,ic);}void main(){A obj(5,7);//створення об’єкту obj і ініціалізація полів b,c поля objbobj.objb.print();}

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

#include <iostream.h>class B//клас B{int b,c;//поля b і c типу intpublic:B(int initb,int initc):b(initb),c(initc){};//конструктор класу Bvoid print(){cout<<b<<" "<<c<<endl;}};class A//клас A{public:B objb;//поле objb типу BA(int ib, int ic):objb(ib,ic){};//конструктор класу A};void main(){A obj(5,7);//створення об’єкту obj і ініціалізація полів b,c поля objbobj.objb.print();}

Дружні функції (1)

#include <iostream.h>class A//клас A{int a,b;//закриті поляpublic:A(int ia, int ib):a(ia),b(ib){};friend int sum(int pa,int pb);//оголошення дружньої функції (не члену класу A)};int sum(int pa, int pb)//визначення дружньої функції{A* obj=new A(pa,pb);int s=obj->a+obj->b;//можливий доступ до закритих полів класу Adelete obj;return s;}void main(){cout<<sum(2,3);//виклик дружньої функції}

Дружні функції (2)

#include <iostream.h>class A//клас A{int a,b;//закриті поляpublic:A(int ia, int ib):a(ia),b(ib){};friend int sum(A);//оголошення дружньої функції (не члену класу A)};int sum(A pobj)//визначення дружньої функції{return pobj.a+pobj.b;//можливий доступ до закритих полів класу A}void main(){A obj(2,3);//створити об’єкт objcout<<sum(obj);//викликати дружню функцію з аргументом obj}

Успадкування



Поделиться:


Последнее изменение этой страницы: 2017-01-24; просмотров: 298; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.219.95.244 (0.004 с.)