c++ 工厂模式
时间: 2023-06-21 16:17:43 浏览: 95
C++设计模式之工厂方法模式
5星 · 资源好评率100%
在 C++ 中使用工厂模式更为常见,因为 C++ 支持面向对象编程。下面是一个 C++ 工厂模式的例子,使用了抽象基类和纯虚函数:
```c++
#include <iostream>
using namespace std;
// 定义抽象基类
class Shape {
public:
virtual void draw() = 0;
virtual ~Shape() {}
};
// 定义具体类
class Rectangle : public Shape {
public:
void draw() {
cout << "This is a rectangle." << endl;
}
};
class Circle : public Shape {
public:
void draw() {
cout << "This is a circle." << endl;
}
};
// 定义工厂类
class ShapeFactory {
public:
Shape* createShape(char type) {
switch (type) {
case 'r':
return new Rectangle();
case 'c':
return new Circle();
default:
return NULL;
}
}
};
int main() {
ShapeFactory factory;
Shape* shape1 = factory.createShape('r');
Shape* shape2 = factory.createShape('c');
shape1->draw();
shape2->draw();
delete shape1;
delete shape2;
return 0;
}
```
在上面的代码中,我们定义了一个抽象基类 `Shape`,它有一个纯虚函数 `draw`,用于在派生类中实现。然后,我们又定义了两个具体类 `Rectangle` 和 `Circle`,它们分别继承自 `Shape`,并实现了 `draw` 函数。
接下来,我们定义了一个工厂类 `ShapeFactory`,它有一个函数 `createShape`,根据类型参数创建相应的对象。如果类型参数是 `'r'`,则创建一个 `Rectangle` 对象;如果类型参数是 `'c'`,则创建一个 `Circle` 对象。注意,这里我们返回的是 `Shape*` 类型,因为 `Rectangle` 和 `Circle` 类都继承自 `Shape`,所以它们可以被转化为 `Shape` 类型的指针。
最后,我们在 `main` 函数中使用工厂类创建了两个对象,并调用它们的 `draw` 函数输出了对象的信息。注意,我们在程序结束时需要手动释放对象占用的内存。
阅读全文