菱形继承的复制赋值运算符 C++

Copy assignment operator for diamond inheritance C++

提问人:Stefan Nastase 提问时间:1/5/2021 最后编辑:Stefan Nastase 更新时间:1/5/2021 访问量:137

问:

我在钻石继承层次结构中有 4 个类。在课堂上称呼父母双方的作业操作员为作业操作员是否正确?它不会调用运算符= 2次吗?有没有更好的方法?der12base

    protected:
        int a = 1;

    public:
        base& operator=(const base& ref){
            ...
        }
};

class der1 : virtual public base{
    protected:
        int b = 2;
    
    public:
        der1& operator=(const der1& ref){
            ...
        }
};

class der2 : virtual public base{
    protected:
        int c = 3;
        
    public:
        der2& operator=(const der2& ref){
            ...
        }
};

class der12 : public der1, public der2{
    int d = 4;

    public:
        der12& operator=(const der12& ref){
            der1::operator=(ref);
            der2::operator=(ref);
            d = ref.d;
            
            return *this;
        }
};```
C++ OOP 继承 -重载 赋值运算符

评论

1赞 Peter 1/5/2021
赋值运算符 不会调用 或 的复制构造函数。der12der1der2
0赞 Stefan Nastase 1/5/2021
@Peter它调用了赋值运算符,我现在编辑了我的帖子,谢谢!der1der2
2赞 super 1/5/2021
您可以分离每个类的赋值逻辑,并将其放在受保护的成员函数中。然后从每个类的分配运算符中调用您需要的那些。
1赞 Passer By 1/5/2021
这说明了为什么你永远不应该做钻石继承。他们在实践中,总是一个坏主意。

答: 暂无答案