C++
中的多态一例
C++
为我们提供了多态的功能,什么是多态呢,我的理解就是如果把指向派生类对象的指针赋值给基类指针,那么通过这个基类指针调用继承的函数的时候会根据指针指向的对象类型来动态的调用所需要的方法,这种特性就是多态了。(除了这个之外好像函数重载也是一种)
可以先看下面一段程序:
程序代码
#include <iostream>
using namespace std;
class Shape
{
public:
virtual void draw()
{
cout<<"Draw shape"<<endl;
}
};
class Circle: public Shape
{
public:
virtual void draw()
{
cout<<"Draw Circle"<<endl;
}
};
class Triangle: public Shape
{
public:
virtual void draw()
{
cout<<"Draw Triangle"<<endl;
}
};
class Square: public Shape
{
public:
virtual void draw()
{
cout<<"Draw Square"<<endl;
}
};
int main()
{
Shape *pShape = NULL;
Circle aCircle;
Triangle aTriangle;
Square aSquare;
pShape= &aCircle;
pShape->draw();
pShape= &aTriangle;
pShape->draw();
pShape=&aSquare;
pShape->draw();
return 0;
}
程序的运行结果是
:
Draw Circle
Draw Triangle
Draw Square
从结果可以可以看到,输出的结果并不是
Draw shape
。
这个就是多态的功效所在了。它直接根据指针实际指向的类型来动态调用了执行的函数。
要使用多态,必须把基类中需要使用多态功能的方法定义为
virtual
,
这样才能使用多态的强大功能。如果把基类的
draw
方法前面的
virtual
去掉,那么最后输出的结果将会是
Draw Shape
Draw Shape
Draw Shape
这说明没有使用多态,只是覆盖了。
多态的好处是显然的,开发者可以利用旧代码来调用新的方法,这样软件供应商可以在不透露技术秘密的情况下发现软件包,而开发者也可以根据继承机制从软件供应商提供的类库中派生出新类,且能和旧类库一起工作。
此文完。
参考自《高质量程序设计指南
C/C++
语言》