第三节 · 进化论 · 虚函数与抽象基类
多态是面向对象的精髓:同一个接口,不同的实现。通过多态,我们可以用统一的方式处理不同类型的对象。
虚函数
class Shape
{
public:
// 虚函数:允许派生类重写
virtual void draw() const
{
cout << "Drawing a shape" << endl;
}
};
class Circle : public Shape
{
public:
void draw() const override // override 确保是重写
{
cout << "Drawing a circle" << endl;
}
};
class Rectangle : public Shape
{
public:
void draw() const override
{
cout << "Drawing a rectangle" << endl;
}
};
int main()
{
Shape* shapes[3];
shapes[0] = new Shape();
shapes[1] = new Circle();
shapes[2] = new Rectangle();
for (int i = 0; i < 3; ++i)
{
shapes[i]->draw(); // 根据实际类型调用
}
// 清理
for (int i = 0; i < 3; ++i)
delete shapes[i];
return 0;
}
// 输出:
// Drawing a shape
// Drawing a circle
// Drawing a rectangleoverride 和 final
纯虚函数与抽象类
虚析构函数
规则:如果类有虚函数,就应该有虚析构函数。
动态绑定原理
RTTI:运行时类型识别
接口模式
NVI 模式(非虚接口)
习题
解释虚函数表(vtable)的工作原理。
什么时候需要虚析构函数?
实现一个简单的图形编辑器,使用多态处理不同形状。
Last updated