- C++ 多态有两种:静态多态(早绑定)、动态多态(晚绑定)。静态多态是通过函数重载实现的;动态多态是通过虚函数实现的。
- 多态是以封装和继承为基础的。
静态多态(早绑定)
动态多态(晚绑定)
- 虚函数:用 virtual 修饰成员函数,使其成为虚函数
- 普通函数(非类成员函数)不能是虚函数
- 静态函数(static)不能是虚函数
- 构造函数不能是虚函数(因为在调用构造函数时,虚表指针并没有在对象的内存空间中,必须要构造函数调用完成后才会形成虚表指针)
- 内联函数不能是表现多态性时的虚函数,解释见:
{
public:
virtual double calcArea()
{
}
virtual ~Shape();
};
class Circle : public Shape // 圆形类
{
virtual double calcArea();
...
};
class Rect : public Shape // 矩形类
{
public:
...
};
int main()
Shape * shape1 = new Circle(4.0);
Shape * shape2 = new Rect(5.0, 6.0);
shape1->calcArea(); // 调用圆形类里面的方法
shape2->calcArea(); // 调用矩形类里面的方法
delete shape1;
shape1 = nullptr;
delete shape2;
shape2 = nullptr;
}