两个父母中只有一个的分配操作员

时间:2011-09-01 15:56:06

标签: c++ operator-overloading multiple-inheritance assignment-operator

孩子有两个父母:Foo和Bar。 Foo不允许复制。酒吧。 Child如何使用Bar的赋值运算符复制到Bar的Child子集中(同时保留Foo的子集完整)?

更具体一点:在下面的代码中,Child如何在replace_bar()中引用Bar? (您如何修改第(X)行以使代码编译?)

class Foo
{
public:
    Foo () {}
private:
    Foo (const Foo & f) {} // forbid copy construction
    Foo & operator= (const Foo & foo) {} // forbid assignment
};

class Bar
{
public:
    Bar () {}
    Bar & operator= (const Bar & bar) {}
};

class Child : public Foo, public Bar
{
public:
    Child () {}
    void replace_bar (const Bar & bar2)
    {
        *this = bar2;           // line (X)
    }
};

int main ()
{
    Child child;
    Bar newbar;
    child.replace_bar (newbar);
}

1 个答案:

答案 0 :(得分:1)

void replace_bar(const Bar& bar2) {
     Bar::operator=(bar2);
}

在其他新闻中,您错过了return *this;中的Bar::operator=,如果您只想阻止Foo的复制,则不应该定义复制构造函数和赋值运算符,只声明他们。这样,即使您尝试在类中使用它们,您也会收到错误(尽管链接错误不是编译错误)。

class Foo {
    Foo(const Foo&); // no body
    Foo& operator=(const Foo&); // ditto
public: 
    Foo() { }
};