虚函数、多态 相关 ,简单例子

看c++教程中,总少不了的一块。

虚函数,动态绑定相关,测试代码如下:

class Bbb
{
public:
    int m;
public:
    Bbb() :m(8){};
     /*virtual*/ ~Bbb()
    {
        cout << "de bbb" << endl;
    }
     virtual void pp() /*= 0;*/
    {
        cout << "bbbb:" << m << endl;
    }
private:

};
class Dd : public Bbb
{
public:
    int m;
public:
    Dd() :m(9){};
    ~Dd()
    {
        cout << "de ddd" << endl;
    }
     virtual void pp()
     {
         cout <<"dddd:"<< m << endl;
     }
};


void funtt(Bbb &iv)
{
    cout << "ffff:" << iv.m << endl;
    iv.pp();
}


int _tmain(int argc, _TCHAR* argv[])
{
    Bbb *pB;
    pB = new Dd();
    delete pB;

    Dd * pdd;
    pdd = new Dd();
    delete pdd;

    {
        Dd dd;
        int isssizedd = sizeof(dd);
        cout << "main:" << dd.m << endl;
        funtt(dd);
    }
}

输出结果如下:

//de bbb
//de ddd
//de bbb
//main:9
//ffff:8
//dddd:9
//de ddd
//de bbb

如果基类中的那个虚函数定义为纯虚的话,输出结果不变。

有一点加强下记忆的是,多态时候 那个虚函数调用的属性值是指针静态类型的值,对应测试输出语句是“//ffff:8”。

对于基类对象和派生类对象直接转换什么的,得再专门看下。。

原文地址:https://www.cnblogs.com/xiarl/p/3436081.html