Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 仅在两个父对象之一上的赋值运算符_C++_Operator Overloading_Multiple Inheritance_Assignment Operator - Fatal编程技术网

C++ 仅在两个父对象之一上的赋值运算符

C++ 仅在两个父对象之一上的赋值运算符,c++,operator-overloading,multiple-inheritance,assignment-operator,C++,Operator Overloading,Multiple Inheritance,Assignment Operator,这个孩子有两个父母:福和巴。Foo不允许复制。酒吧有。子对象如何使用Bar的赋值运算符复制到Bar的子对象子集中(同时保持Foo的子集不变) 更具体地说:在下面的代码中,Child如何引用replace_Bar()中的just Bar?(如何修改第(X)行以使代码编译?) 在其他新闻中,您缺少一个return*this在Bar::operator=中,如果您只想阻止Foo的复制,则不应定义复制构造函数和赋值运算符,只需声明它们。这样,即使您试图在类中使用它们,也会出现错误(尽管是链接错误而不是编

这个孩子有两个父母:福和巴。Foo不允许复制。酒吧有。子对象如何使用Bar的赋值运算符复制到Bar的子对象子集中(同时保持Foo的子集不变)

更具体地说:在下面的代码中,Child如何引用replace_Bar()中的just Bar?(如何修改第(X)行以使代码编译?)

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

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


我现在明白了,答案似乎很明显。谢谢回复:声明而不是定义:好的观点。回复:“return*this;”--这也是一个很好的观点,尽管只有在引入Bar变量时才相关。现在我看到的答案似乎很明显。谢谢回复:声明而不是定义:好的观点。回复:“return*this;”--这也是一个很好的观点,尽管只有在引入Bar变量时才相关。
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);
}
void replace_bar(const Bar& bar2) {
     Bar::operator=(bar2);
}
class Foo {
    Foo(const Foo&); // no body
    Foo& operator=(const Foo&); // ditto
public: 
    Foo() { }
};