- 背景与需求
- 在一个图形绘制软件中,需要绘制多种不同的图形,如圆形、矩形、三角形等。每个图形都有自己的绘制方法,但是它们都可以被看作是一个抽象的 “图形” 概念,并且都有一个共同的操作,比如绘制(draw)。
- 多态的实现方式
- 首先定义一个抽象基类Shape,其中包含一个纯虚函数draw。例如:
class Shape {
public:
virtual void draw() = 0;
};
- 然后针对不同的图形,如圆形Circle、矩形Rectangle等,派生出具体的类,并实现draw函数。以圆形为例:
class Circle : public Shape {
public:
void draw() override {
// 这里是绘制圆形的具体代码,比如使用图形库绘制一个圆
std::cout << "Drawing a circle." << std::endl;
}
};
- 在主程序中,可以通过一个指向基类Shape的指针或引用数组来存储不同类型的图形对象,然后通过循环调用draw函数。例如:
int main() {
Shape* shapes[2];
shapes[0] = new Circle();
// 假设还有Rectangle类,这里可以类似地创建并存储Rectangle对象
// shapes[1] = new Rectangle();
for (int i = 0; i < 2; ++i) {
shapes[i]->draw();
}
return 0;
}
- 这样,无论添加多少种新的图形,只要它们继承自Shape类并实现了draw函数,就可以方便地在主程序中进行调用,而不需要对主程序进行大量的修改。这种多态性使得图形绘制系统具有很好的扩展性。