多态

  • 多态,即多种状态,在面向对象语言中,接口的多种不同的实现方式即为多态。
  • C++ 多态有两种:静态多态(早绑定)、动态多态(晚绑定)。静态多态是通过函数重载实现的;动态多态是通过虚函数实现的。
  • 多态是以封装和继承为基础的。

静态多态(早绑定)

函数重载

  1. class A
  2. {
  3. public:
  4. void do(int a);
  5. void do(int a, int b);
  6. };

动态多态(晚绑定)

  • 虚函数:用 virtual 修饰成员函数,使其成为虚函数

注意:

  • 普通函数(非类成员函数)不能是虚函数
  • 静态函数(static)不能是虚函数
  • 构造函数不能是虚函数(因为在调用构造函数时,虚表指针并没有在对象的内存空间中,必须要构造函数调用完成后才会形成虚表指针)
  • 内联函数不能是表现多态性时的虚函数,解释见:虚函数(virtual)可以是内联函数(inline)吗?

动态多态使用

  1. class Shape // 形状类
  2. {
  3. public:
  4. virtual double calcArea()
  5. {
  6. ...
  7. }
  8. virtual ~Shape();
  9. };
  10. class Circle : public Shape // 圆形类
  11. {
  12. public:
  13. virtual double calcArea();
  14. ...
  15. };
  16. class Rect : public Shape // 矩形类
  17. {
  18. public:
  19. virtual double calcArea();
  20. ...
  21. };
  22. int main()
  23. {
  24. Shape * shape1 = new Circle(4.0);
  25. Shape * shape2 = new Rect(5.0, 6.0);
  26. shape1->calcArea(); // 调用圆形类里面的方法
  27. shape2->calcArea(); // 调用矩形类里面的方法
  28. delete shape1;
  29. shape1 = nullptr;
  30. delete shape2;
  31. shape2 = nullptr;
  32. return 0;
  33. }