• C++ 多态有两种:静态多态(早绑定)、动态多态(晚绑定)。静态多态是通过函数重载实现的;动态多态是通过虚函数实现的。
  • 多态是以封装和继承为基础的。

静态多态(早绑定)

动态多态(晚绑定)

  • 虚函数:用 virtual 修饰成员函数,使其成为虚函数
  • 普通函数(非类成员函数)不能是虚函数
  • 静态函数(static)不能是虚函数
  • 构造函数不能是虚函数(因为在调用构造函数时,虚表指针并没有在对象的内存空间中,必须要构造函数调用完成后才会形成虚表指针)
  • 内联函数不能是表现多态性时的虚函数,解释见:
  1. {
  2. public:
  3. virtual double calcArea()
  4. {
  5. }
  6. virtual ~Shape();
  7. };
  8. class Circle : public Shape // 圆形类
  9. {
  10. virtual double calcArea();
  11. ...
  12. };
  13. class Rect : public Shape // 矩形类
  14. {
  15. public:
  16. ...
  17. };
  18. int main()
  19. Shape * shape1 = new Circle(4.0);
  20. Shape * shape2 = new Rect(5.0, 6.0);
  21. shape1->calcArea(); // 调用圆形类里面的方法
  22. shape2->calcArea(); // 调用矩形类里面的方法
  23. delete shape1;
  24. shape1 = nullptr;
  25. delete shape2;
  26. shape2 = nullptr;
  27. }