基类中没有的方法,不要乱调用

#include <iostream>
using namespace std;

class A{

public:
    A()
    {
        cout<<"construct A"<<endl;
    }

    virtual void disp()
    {
        cout<<"AAAA"<<endl;
    }

    ~A()
    {
        cout<<"destory A"<<endl;
    }

};

class B:public A {

public:

    B()
    {
        cout<<"construct B"<<endl;
    }

    virtual void disp(int a) //是基类的扩展(重载,只能B的实例来调用),不是重写!!
    {
        cout<<"BBBB"<<endl;
    }

    ~B()
    {
        cout<<"destory B"<<endl;
    }
};


int main()
{
    B *b = new B();

    A *a = b; //A只是个指针 并没有构造 只需要析构b即可

    //a->disp(2); //no matching function for call to 'A::disp(int)'
                //就是说a中没有的方法不能乱调用

    a->disp();//派生类中没有重写,则调用基类版本

    delete b;


    return 0;
}

 

posted @ 2017-10-10 22:52  hertz0725  阅读(133)  评论(0编辑  收藏  举报