多态
字面意思是多种状态。在多态里涉及两个定义。
- 覆盖:即子类继承父类的同时重写了父类的函数,从而使父类中的同名函数,以子类重写的为准。前提条件,父类对应的函数为虚函数。
- 隐藏:即子类继承父类的同时重写了父类的函数,但是父类中的同名函数,依然存在。只是子类默认调用的是重写的函数。但是父类的函数还是存在的,可以以别的方式调用。前提:父类对应的函数非虚函数。
多态的本质:在一个类中创建虚函数后,会产生一个虚表,虚表中存储者虚函数的地址,当重写虚函数时,虚表的地址会发生改变。
下面我写了一个简单的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;
}
执行结果如下:
动物
我是有生命的
.........................................
鸟儿
我是有生命的
.........................................
动物
我是有生命的
.........................................
鸟儿
我是有生命的鸟儿,我会飞
.........................................
网友评论