c++ 工厂函数
在C++中,工厂函数是一种特殊的函数,用于创建对象并返回对象的指针或引用。它通常用于封装对象的创建逻辑,以便在需要时动态地创建对象。
工厂函数的常见用法是在抽象基类中定义一个静态成员函数,该函数返回一个指向派生类对象的指针或引用。这样,客户端代码可以通过调用工厂函数来获取派生类对象的指针或引用,而不需要知道具体的派生类类型。
下面是一个简单的示例,演示了如何使用工厂函数:
cpp
class Shape {
public:
    virtual void draw() = 0; // 纯虚函数
};
class Circle : public Shape {
public:
    void draw() override {
        std::cout << "Drawing a circle" << std::endl;
    }
};
class Rectangle : public Shape {
public:
    void draw() override {
        std::cout << "Drawing a rectangle" << std::endl;
    }
};
// 工厂函数,用于创建Shape对象
Shape* createShape(const std::string& type) {
    if (type == "circle") {
        return new Circle();
    } else if (type == "rectangle") {
        return new Rectangle();
    } else {
        return nullptr; // 无效类型,返回空指针
    }
}
指针调用成员函数在上面的示例中,我们定义了一个抽象基类Shape,它有一个纯虚函数draw()。我们还定义了两个派生类Circle和Rectangle,它们分别实现了draw()函数。
工厂函数createShape()接受一个字符串参数type,根据该参数的值创建相应的Shape对象,并返回指向该对象的指针。客户端代码可以通过调用createShape()函数来获取Shape对象的指针,并调用其draw()函数。这样,客户端代码就可以动态地创建不同类型的Shape对象,而不需要知道具体的派生类类型。