作用是 一个接口,多种方法。虽然重载也算是一种多态,但是是在编译时就已经确定下来了,是一种静态多态。而多态则是一种动态多态,在程序运行时刻才确定下来
- 向上转换数据类型
- 用向上转换後的指针调用派生类内的同名成员函数
- 使用引用调用同名成员函数
- 间接调用同名成员函数
在基类成员函数前加上关键字 virtual,告知编译器此函数参与多态运算,在运行时动态调用
一个总结上述情况的代码例子
#include<iostream>
using namespace std;
class Shape
{
private:
int n;
public:
Shape():n(5){}
~Shape(){}
virtual void Draw() { cout << "画一个图形" << endl; }
virtual void Area() { cout << "计算图形面积" << endl; }
virtual void Erase() { cout << "将图形清除" << endl; }
void Size() { Area(); }
};
class Cube:public Shape
{
private:
int e;
public:
Cube() :e(2) {}
~Cube() {}
virtual void Draw() { cout << "画一个立方体" << endl; }
virtual void Area() { cout << "计算立方体面积" << endl; }
virtual void Erase() { cout << "清除立方体" << endl; }
};
void Update(Shape &S)
{
S.Draw();
}
int main(void)
{
Shape *pS;
Cube C;
pS = &C;
cout << "执行Update函数後:";
Update(C);//引用方式调用
cout << "执行Size函数後:";
pS->Size();//间接调用
cout << "执行Erase函数後:";
pS->Erase();//指针调用
system("pause");
return 0;
}
网友评论