一、多态
1.多态是指:调用成员函数时,会根据调用函数的对象的类型来执行不同的函数
2.用到多态的情况:当类之间是通过继承关联时
举例:
#include <iostream> using namespace std; class Shape { protected: int width, height; public: Shape( int a=0, int b=0) { width = a; height = b; } virtual int area() { cout << "Parent class area :" <<endl; return 0; } }; class Rectangle: public Shape{ public: Rectangle( int a=0, int b=0):Shape(a, b) { } int area () { cout << "Rectangle class area :" <<endl; return (width * height); } }; class Triangle: public Shape{ public: Triangle( int a=0, int b=0):Shape(a, b) { } int area () { cout << "Triangle class area :" <<endl; return (width * height / 2); } }; // 程序的主函数 int main( ) { Shape *shape; Rectangle rec(10,7); Triangle tri(10,5); // 存储矩形的地址 shape = &rec; // 调用矩形的求面积函数 area shape->area(); // 存储三角形的地址 shape = &tri; // 调用三角形的求面积函数 area shape->area(); return 0; }
当编译和执行前面的实例代码时,它会产生以下结果:
Rectangle class area :
Triangle class area :
二、虚函数
1.定义
虚函数是在基类中使用关键字 virtual 声明的函数
2.作用
在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数
3.静态多态、动态多态
我们想要的是在程序中任意点可以根据所调用的对象类型来选择调用的函数,这种操作被称为动态链接,或后期绑定;
当调用函数被编译器设置为基类中的版本,就是所谓的静态多态,或静态链接 ,函数调用在程序执行前就准备好了
例如,在上例中,如果将 shape 类中的 virtual 去掉
它会产生下列结果:
Parent class area :
Parent class area :
即为,静态多态。