2019-07-13 多态

2019-07-13  本文已影响0人  知成

多态


字面意思是多种状态。在多态里涉及两个定义。

多态的本质:在一个类中创建虚函数后,会产生一个虚表,虚表中存储者虚函数的地址,当重写虚函数时,虚表的地址会发生改变。

下面我写了一个简单的demo

#include<iostream>
using namespace std;
class CAnimal
{
public:
    virtual void Description();
    void Feature();
};
class CBird:public CAnimal
{
public:
    void Description();
    void Feature();
};
int main()
{
    CAnimal animal;
    CBird bird;
    CAnimal *panimal = NULL;
    panimal = &animal;
    panimal->Description();
    panimal->Feature();
    cout << "........................................." << endl;
    panimal = &bird;
    panimal->Description();
    panimal->Feature();
    cout << "........................................." << endl;
    animal.Description();
    animal.Feature();
    cout << "........................................." << endl;
    bird.Description();
    bird.Feature();
    cout << "........................................." << endl;
    getchar();
    getchar();
    return 0;
}

void CAnimal::Description()
{
    cout << "动物" << endl;
}

void CAnimal::Feature()
{
    cout << "我是有生命的" << endl;
}

void CBird::Description()
{
    cout << "鸟儿" << endl;
}

void CBird::Feature()
{
    cout << "我是有生命的鸟儿,我会飞" << endl;
}

执行结果如下:
动物
我是有生命的
.........................................
鸟儿
我是有生命的
.........................................
动物
我是有生命的
.........................................
鸟儿
我是有生命的鸟儿,我会飞
.........................................

用GDB调试查看虚表结果如下图所示:

1.png 2.png 3.png
上一篇下一篇

猜你喜欢

热点阅读