仅对两个父级中的一个进行赋值操作符
Assignment operator on only one of two parents
子节点有两个父节点:Foo和Bar。Foo不允许复制。酒吧。孩子如何使用Bar的赋值运算符复制到Bar的子子集(同时留下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);
}
void replace_bar(const Bar& bar2) {
Bar::operator=(bar2);
}
在其他新闻中,你在Bar::operator=
中缺少了一个return *this;
,如果你想做的只是防止复制Foo
,你不应该定义复制构造函数和赋值操作符,只声明它们。这样,即使你试图在类中使用它们,你也会得到一个错误(尽管是链接错误而不是编译错误)。
class Foo {
Foo(const Foo&); // no body
Foo& operator=(const Foo&); // ditto
public:
Foo() { }
};
相关文章:
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- 为什么同时使用一个赋值运算符处理复制和移动赋值效率不高
- 正在初始化一个真正初始化的垃圾变量,或者只是一个赋值
- c++中的重载赋值操作符
- c++类继承和赋值操作符
- 带引用类成员的赋值操作符
- 复制构造函数,赋值操作符重载
- c++派生类赋值操作符
- 通过调用Move赋值操作符实现Move构造函数
- 带有映射的赋值操作符
- 单参数构造函数和赋值操作符
- 如何从复制赋值操作符调用复制构造函数
- c++复制构造函数,重载赋值操作符,方法get()
- 用于具有const数据成员的类的move和右值赋值操作符
- 在可强制转换为另一个模板类型的类模板中重载赋值操作符
- 为什么不是只有一个?复制构造函数和赋值操作符
- 仅对两个父级中的一个进行赋值操作符
- c++赋值操作符,如何将一个对象设置为等于一个新对象的实例
- 给定了一个变量,编译器是否总能安全地创建赋值操作符?
- 如何编写一个拷贝赋值操作符来处理引用