继承关系下的函数的调用
一直以为自己很清楚了,可惜,一做实际题目就挂了。对dynamic binding以及vtable的理解还欠缺很多啊!记下来,以时时提醒自己。。。
class FooA{
public:
FooA(){
cout<<"ctor A"<<endl;
}
//virtual void display(){
void display(){
cout<<"dipslay A"<<endl;
}
//virtual ~FooA(){
~FooA(){
cout<<"dtor A"<<endl;
}
};
class FooB:public FooA{
public:
FooB(){
cout<<"ctor B"<<endl;
}
void display(){
cout<<"dipslay B"<<endl;
}
~FooB(){
cout<<"dtor B"<<endl;
}
};
int main () {
FooA *a = new FooB;
a->display();
delete a;
cout<<"waiting"<<endl;
FooB c;
c.display();
return 0;
}
output:
ctor A
ctor B
display A
dtor A
waiting
ctor A
ctor B
display B
dtor B
dtor A
如果FooA的dtor和display都是virtual的话,output是:
ctor A
ctor B
display B
dtor B
dtor A
waiting
ctor A
ctor B
dtor B
dtor B
dtor A
浙公网安备 33010602011771号