c ++如何使用受保护的赋值运算符进行赋值?

时间:2017-01-12 18:15:22

标签: c++

我正在处理一个我无法篡改的课程。 这基本上就是我所拥有的:

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版本完成的。 谢谢你的帮助

2 个答案:

答案 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());
}