gpt4 book ai didi

c++ - 如何在 C++ 中制作可比较的类

转载 作者:行者123 更新时间:2023-11-30 01:16:12 26 4
gpt4 key购买 nike

我想用 C++ 制作一个界面。如何在运算符重载语句中获取 op2.radius 值?我希望 Comparable Class 可以用于其他类,例如 Rectangle、Line 等。

#include <iostream>
using namespace std;

class Comparable {
public:
virtual bool operator > (Comparable& op2)=0;
//virtual bool operator < (Comparable& op2)=0;
//virtual bool operator == (Comparable& op2)=0;
};

class Circle : public Comparable {
int radius;
public:
Circle(int radius=1) { this->radius = radius; }
int getRadius() { return radius; }
bool operator > (Comparable& op2)
{
if (radius > op2.radius) // <-- here!
return true;
else
return false;
}

};

template <class T>
T bigger(T a, T b){
if (a > b) return a;
else
return b;
}

void main()
{
Circle waffle(10), pizza(20), y;
y = bigger(waffle, pizza);
cout << "the bigger one is " << y.getRadius() << endl;
}

最佳答案

你需要做一个向下转换,没有通用的方法来获取半径。
如果您确定传递给它的唯一对象是 Circle 类型,那么静态转换就足够了。
如果不是这种情况,则尝试使用 dynamic_cast 来检查它是否是 Circle 对象。如果失败则返回 false。
注意:dynamic_cast 会降低性能。

bool operator > (Comparable& op2)
{
Circle* foo = dynamic_cast<Circle*>(&op2);
if (foo && (radius > foo->getRadius()))
{
return true;
}
else
{
return false;
}
}

关于c++ - 如何在 C++ 中制作可比较的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27098650/

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