Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- class A {
- protected :
- int x ;
- public :
- A( ) { cout<<"AK"; x = 5 ;}
- ~A( ) { cout<<"AD" ; }
- virtual void m( ) { x++ ; cout<<x ; }
- } ;
- class B : public A {
- public:
- B( ) : A( ) { cout<<"BK" ; }
- ~B( ) { cout<< "BD" ; }
- void m( ) { x--; cout<<x ;}
- };
- main( ) {
- B b;
- A a;
- b.m( );
- b.m( );
- // BREAKPOINT 1 , sada objekat b ovde ima vrednost 3, 5 je dva puta umanjeno
- // objekat a pamti x = 5, objekat je kreiran prije nego su b.m() dvaput umanjili njegovu vrednost
- // ovde je sada x = 5
- A *pa = &a;
- // pozivom nad pokazivacem, poziva se VIRTUELNA metoda objekta a koji se krije iza pokazivaca
- // ovde se X uvecava, postaje 6...
- pa->m();
- // *pa = &b; - ovo bi bilo jednako A = *B, odnosno objektu klase A bi se dodjeljivao pokazivac objekta klase B
- // ---> TO NE MOZE!
- // NA OVAJ NACIN JE IZVRSENO DEREFERENCIRANJE, ODNOSNO *pa ode na adresu na koju "pa" pokazuje i uzme BAS
- // taj sadrzaj sa te adrese.
- // na ovaj nacin, menjam sadrzaj pokazivaca "pa", on vise ne pokazuje na objekat klase A, nego na objekat klase B
- // ako je "pa" pokazivac A *pa.
- pa = &b; // pokazivac na objekat klase A kome je dodeljena adresa objekta B. ----> dozvoljeno zato sto B sadrzi objekat klase A
- // JUJUJU,STA SE DESILO...
- // sada posto pa = &b, "pa" kao pokazivac klase A koja je nadklasa klasi B cijeg tipa je dodjeljen objekat pokazivacu "pa"
- // uzima metodu iz PODKLASE, odnosno METODU iz objekta koji je dodjeljen i poslednje stanje objekta b se umanjuje.
- // to je bilo BREAKPOINT 1, 3 se umanjuje i postaje 2.
- //
- // kada m nije virtuelna u nadklasi, pozvace je iz NADKLASE jer je pokazivac NADKLASNOG TIPA
- // kada m jeste virtuelna u nadklasi, pozvace iz PODKLASE BEZ OBZIRA sto je NADKLASNOG TIPA.
- (*pa).m( );
- return 0;
- // AK konstruktor nadklase A koju B nasledjuje
- // BK konstruktor objekta b
- // AK konstruktor od A a; objekta
- // 4 b.m(), poziva se funkcija iz objekta klase B
- // 3 jos jednom...
- // 6 pa->m(); poziva svoju virtuelnu metodu iz objekta a
- // 2 posto PA sada pokazuje na ojekat b klase B, njegovo poslednje prethodno stanje se umanjuje.
- // AD destruktori obrnutim redom od pozivanja.
- // BD ...
- // AD ...
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement