定义CTest类,并实现一个成员方法DoDraw, 参数为:Shape, 该方法是功能是实现绘画功能, 然后在该类的main方法中调用DoDraw能多态地实现: 图形, 输出“画图形”, 长方形, 输出“画长方形”, 圆形, 输出“画圆形”,
时间: 2024-12-29 18:36:36 浏览: 4
在C++中,你可以定义一个名为CTest的类,这个类有一个模板方法`DoDraw`,用于接收不同类型的Shape实例,并通过多态性动态调用各自的Draw方法。以下是这个类的示例:
```cpp
#include <iostream>
class Shape {
public:
// 抽象基类Shape的虚函数Draw
virtual void Draw() const {
std::cout << "画图形" << std::endl;
}
};
class Rectangle : public Shape {
public:
void Draw() const override {
std::cout << "画长方形" << std::endl;
}
};
class Circle : public Shape {
public:
void Draw() const override {
std::cout << "画圆形" << std::endl;
}
};
class CTest {
public:
// 模板方法DoDraw,接受Shape类型
template<typename T>
void DoDraw(const T& shape) {
shape.Draw();
}
// main函数演示多态调用
int main() {
Shape* shapes[] = {new Rectangle(), new Circle()};
for (auto shape : shapes) {
DoDraw(*shape);
}
delete[] shapes; // 不忘记删除动态分配的内存
return 0;
}
};
```
在这个程序中,`CTest`的`DoDraw`方法接收一个Shape类型的引用,然后使用模板特性确保了调用的是对应Shape子类的`Draw`方法。在`main`函数里,我们创建了Rectangle和Circle的实例,并通过`CTest`的`DoDraw`方法展示了多态的效果。
阅读全文