【问题标题】:Overloading comparison operators in derived class right private inheritance在派生类正确的私有继承中重载比较运算符
【发布时间】:2011-03-19 01:52:23
【问题描述】:

我这里有两节课。基类:

class A
{
    int x;
public:
    A(int n):x(n){}

    friend bool operator==(const A& left, const A& right)
    {return left.x==right.x;}
};

以及从 A 私有继承的派生类:

class B : private A
{
    int y;
public:
    B(int n,int x):A(x),y(n){}
    friend bool operator==(const B& left, const B& right)
    {
        if(left.y==right.y)
        {/*do something here...*/}
        else{return false;}
    }
};

我知道如何比较 A 的两个实例:我只是将成员变量相互比较。但是我怎么可能比较 B 的实例呢?两个实例很容易在其关联的“A”实例中具有不同的“x”成员,但我不知道如何将这些实例相互比较。

【问题讨论】:

    标签: c++ inheritance operator-overloading


    【解决方案1】:

    您可以将实例强制转换为A&,并为class A 使用相等运算符:

    if (static_cast<A&>(left) == static_cast<A&>(right)) {
        // ...
    }
    

    【讨论】:

    • 哎呀,我还以为是这么简单的事情!
    • 您应该强制转换为A&amp; 以避免构造临时的A 对象。
    • @Mark:感谢您的关注!
    • 按照这个例子,我得到一个编译时错误。与原始代码一样,我将派生类作为参数传递,但我的编译器说它不能从派生引用类型静态转换为基引用类型。但是,当我只是将 static_cast 转换为对象时没有错误……尽管这确实创建了构造临时对象的额外步骤。
    猜你喜欢
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 2021-09-05
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多