gpt4 book ai didi

c++ - 如何在 C++ 中为多态类实现 operator==

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:41:29 27 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
What’s the right way to overload operator== for a class hierarchy?

我有一个基类和几个派生类,如下面的代码所示:

class Base
{
public:
friend bool operator==(const Base&, const Base&);
virtual ~Base(){}

private:
virtual bool equals(const Base& other) const = 0;
};

bool operator==(const Base& lhs, const Base& rhs)
{
return lhs.equals(rhs);
}

class A : public Base
{
public:
A(int x) : x_(x){}

private:
virtual bool equals(const Base& other) const;
int x_;
};

bool A::equals(const Base& other) const
{
const A* pA = dynamic_cast<const A*>(&other);
if(!pA) return false;
return x_ == pA->x_;
}

class B : public Base
{
public:
B(double y) : y_(y){}

private:
virtual bool equals(const Base& other) const;
double y_;
};

bool B::equals(const Base& other) const
{
const B* pB = dynamic_cast<const B*>(&other);
if(!pB) return false;
return y_ == pB->y_;
}

为了能够比较两个派生类,我想要运算符==。问题是如何以面向对象的方式实现这一点(例如,尊重封装性、可维护性和可扩展性)。是否有一些推荐的模式可以做到这一点?除了上述避免 dynamic_cast 的方法之外,还有其他方法吗?

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com