☆Smoozer☆

::Easy Life.
继承关系下的函数的调用

一直以为自己很清楚了,可惜,一做实际题目就挂了。对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

posted on 2008-11-22 10:18  smoozer  阅读(265)  评论(0)    收藏  举报