我正在处理一个我无法篡改的课程。 这基本上就是我所拥有的:
class Base
{
public:
static Base factoryBase()
{
return Base();
}
protected:
Base() {};
Base(Base const & other) { }
Base & operator=(Base const & other) { return *this; }
};
本质上我有一个静态工厂方法来实例化Base
类。
在我的代码中,我想要这样做
Base b = Base::factoryBase();
但由于复制构造函数和赋值运算符为protected
,因此失败。我只能假设它们是这样,所以我可以在派生类中使用它们。
我应该怎么做呢?
class Derived : public Base
{
public:
Derived()
{
//Base::factoryBase(); //what do I do here and how do I store the result?
}
};
我不确定如何将Base :: factoryBase()的结果赋给Derived类本身。它甚至可能吗?我还应该如何使用构造函数和赋值运算符为protected
?
注意:编译是使用早期的c ++ 11版本完成的。 谢谢你的帮助
答案 0 :(得分:2)
你仍然可以这样做:
class Derived : public Base
{
public:
Derived() : Base(/*Base::factoryBase()*/) {}
// Not really useful, but for demonstration
static Derived factoryDerived() { return Derived(); }
};
然后
Derived d = Derived::factoryDerived();
答案 1 :(得分:0)
您可以在派生类中直接调用operator=
:
Derived()
{
Base::operator=(Base::factoryBase());
}