C++举一个模板方法设计的例子,需要用到dynamic_cast类型转换
时间: 2024-10-13 11:07:16 浏览: 19
c++ dynamic_cast与static_cast使用方法示例
在C++中,模板方法设计(Template Method Design)通常用于定义一组算法的行为框架,而具体的实现留给子类来完成。这里我们可以结合`dynamic_cast`展示一个简单的例子。假设我们有一个抽象基类`Shape`,以及两个派生类`Circle`和`Rectangle`,它们都有一个绘制的方法`draw()`。
```cpp
// 抽象基类 Shape
template <typename T>
class Shape {
public:
virtual void draw() const = 0;
};
// 派生类 Circle 和 Rectangle
class Circle : public Shape<Circle> {
private:
double radius;
public:
// 上行转换示例
virtual void draw() const override {
dynamic_cast<Shape<Circle>>(this)->drawImpl();
}
protected:
void drawImpl() const {
std::cout << "Drawing a circle with radius: " << radius << std::endl;
}
};
class Rectangle : public Shape<Rectangle> {
private:
double width, height;
public:
// 下行转换示例
virtual void draw() const override {
dynamic_cast<Shape<Rectangle>>(this)->drawImpl();
}
protected:
void drawImpl() const {
std::cout << "Drawing a rectangle with dimensions: " << width << " x " << height << std::endl;
}
};
```
在这个例子中,`Shape`模板类定义了一个虚函数`draw()`,子类通过`dynamic_cast`实现不同的行为。`Circle`调用`drawImpl()`来绘制圆形,`Rectangle`则绘制矩形。`dynamic_cast`在这里起到了上下转型的作用,确保了正确的执行逻辑。
阅读全文