c++ - simple ctor dilema - inheritance -
what outcome of following code, , please describe why :)
class mother { public: mother ( ) { cout << "r" << endl; } ~mother ( ) { cout << "n" << endl; } }; class daughter: public mother { public: daughter ( ) { cout << "a" << endl; } ~daughter ( ) { cout << "b" << endl; } }; void foo(mother m){ cout<< "foo" <<endl;} int main( ) { daughter lea; mother* rachel; foo(lea); } i not sure why, told me be: r,a,foo,n,b,n (from left right)
why calling "daughter lea" generates r , a? due inheritance? , why did "foo" appear? shouldn't last? thanks!
this flow of program execution
int main( ) { daughter lea; // <- invokes ctor of daughter, after mother mother* rachel; // nothing happens --pointer foo(lea); // foo->~mother, ~mother called upon exit } // ~daughter->~mother so, first, when creating lea, calls ctor of daughter. derived mother, mother ctor called first followed daughter, order of ctor calls in c++ base->derived
second line not pointer declaration.
now, here fun part, when call foo() lea, gets converted mother , passed foo. upon exit foo, ~mother called due local scope of mother in foo.
when program exits, destructs lea, of type daughter. order of destruction opposite order of construction. i.e derieved ->base, hence ~daughter followed ~mother.
that's why getting
r foo n b n
Comments
Post a Comment