Стварање и уништавање примерака изведених класа

Стварање примерка изведене класе:

– извршавају се конструктори основних класа по редоследу навођења основних класа у дефиницији изведене класе. За иницијализацију поља користе се конструктори одговарајућих класа
– извршавају се конструктори поља класних типова по редоследу навођења поља у дефиницији изведене класе. За иницијализацију поља користе се конструктори одговарајућих класа
– иницијализују се поља стандардних типова
– извршава се тело конструктора изведене класе. За иницијализацију класних поља основних класа користи се operator =

Уништавање објеката изведене класе:

– извршава се деструктор изведене класе
– извршавају се деструктори поља класних типова, обрнуто од редоследа извршавања конструктора
– извршавају се деструктори основних класа, обрнуто од редоследа позивања конструктора тих класа


Пример:

class Osn1 // prva osnovna klasa
 {
      int *a;
 public:
      Osn1():a(0){}
 };
class Osn2 // druga osnovna klasa
 {
      char *b;
      double c;
 public:
      Osn2(){b=0;c=5;}
      Osn2(char *x,double y):c(y){b=x;}
 };
 
class Izv:public Osn2,public Osn1 // klasa izvedena iz dve osnovne klase
 {
      int p,q;
      Osn1 r;
      Osn2 s,t;
      double u,v;
 public:
      Izv(int x, char *y,double z):p(x+2),Osn2(y,z),s("ne",x){q=p+z;}
 };
 
int main()
 {
      Izv k(1,"Zdravo",2); // objekat izvedene klase
 } 

Ток иницијализације објекта k у главној функцији је следећи:

Osn2("zdravo",2.0) -> k.c=2.0
                      k.b="Zdravo"
 Osn1()            -> k.a=0
 r.Osn1()          -> k.r.a=0
 s.Osn2("ne",1.0)  -> k.s.c=1.0
                      k.s.b="ne"
 t.Osn2()          -> k.t.b=0
                      k.t.c=5.0
 p(3)              -> k.p=3
 q=3+2.0           -> k.q=5

поља k.u и k.v остају неиницијализована јер за њих нису наведени ни иницијализатори, нити су им додељене вредности у телу конструктора.

Advertisements

Оставите одговор

Попуните детаље испод или притисните на иконицу да бисте се пријавили:

WordPress.com лого

Коментаришет користећи свој WordPress.com налог. Одјавите се / Промени )

Слика на Твитеру

Коментаришет користећи свој Twitter налог. Одјавите се / Промени )

Фејсбукова фотографија

Коментаришет користећи свој Facebook налог. Одјавите се / Промени )

Google+ photo

Коментаришет користећи свој Google+ налог. Одјавите се / Промени )

Повезивање са %s