其他分享
首页 > 其他分享> > c – 虚拟构造函数习语和工厂设计

c – 虚拟构造函数习语和工厂设计

作者:互联网

在虚拟构造函数中,有虚函数,它使用虚函数返回对象的新对象或副本.但是,要以多态方式调用这些虚函数,必须使用实际构造函数创建该类的对象.

在设计模式上下文中,它意味着在使用多态对象创建方式之前,客户端是否知道对象的类型?

解决方法:

客户不一定要了解具体类型.例如,考虑以下层次结构:

struct Base
{
    virtual ~Base();
    virtual Base * clone() const = 0;
    static Base * create(std::string const &);
    // ...
};

struct A : Base { A * clone() const { return new A(*this); } /* ... */ };
struct B : Base { B * clone() const { return new B(*this); } /* ... */ };
struct C : Base { C * clone() const { return new C(*this); } /* ... */ };

Base * Base::create(std::string const & id)
{
    if (id == "MakeA") return new A;
    else return new C;
};

在这种情况下,客户端可以制作和复制现有对象,如下所示:

Base * p = Base::create("IWantB");  // or std::unique_ptr<Base> !
Base * q = p->clone();

在这两种情况下,客户端都不知道* p或* q的动态类型.

标签:c,design-patterns,virtual-functions
来源: https://codeday.me/bug/20190826/1727816.html