所以,我创建了一个类,然后构造了该类的两个独立实例:
disc discOne; // Construct objects
disc discTwo;
类的声明是通过头文件单独完成的:
class disc
{
public:
disc();
~disc();
void changeRadius(short);
void throwDisc(short, short);
void printLocation() const;
void printInfo() const;
private:
short radius;
short xlocation;
short ylocation;
};
我可以使用printInfo()和changeRadius()函数,但是如何比较(例如)这两个对象之间的半径?我想做一些比这更复杂的事情,但如果我理解基本知识,我想尝试解决它。
我遇到的问题是我过去使用过结构,如果是这样的话,我会简单地说:
discOne.radius > discTwo.radius
或类似的东西。但是,类的语法调用与该类绑定的函数。对于漫无边际的对不起,但我无法明确表达 - 可能是为什么我很难通过自己的互联网搜索找到任何指导。
答案 0 :(得分:7)
三种方式:
使用getter方法getRadius() const {return radius;}
并像往常一样进行比较。
如果您想直接比较两个对象,请对operator<
和operator>
使用重叠(但这似乎不是正确的情况。
声明友方函数bool compareRadius(const Disc& discOne, const Disc& discTwo)
以执行比较而不直接涉及对象。
当然最简单的方法是第一种。我刚刚展示了一些其他类似问题可以考虑的选项。
编辑:答案#3基于Scott Meyer的Effective C ++,第23项(尽管它指定了非朋友)。
答案 1 :(得分:6)
您可以在班级中添加“getter”(例如short getRadius() const
),您可以通过该“getter”获取要比较的值:discOne.getRadius() < discTwo.getRadius()
。
或者,您可以向operator<
本身添加disc
重载,并让它执行半径之间的比较。然而,这只有在半径是光盘的唯一属性时才有意义(它不是 - 你也有位置),如果比较半径相当于比较光盘(我不相信这是合乎逻辑的)。
除此之外,还有各种笨拙的解决方案,例如添加bool radiusIsLesserThatThisOtherDiscsRadius(const disc& otherDisc) const
成员函数。
但是,类的语法调用与该类绑定的函数
实际上,那不是真的; C ++没有“结构”,所以struct
也引入了一个类,如果discOne.radius > discTwo.radius
不是私有数据成员,那么radius
就可以正常工作了。但它是一个私人数据成员是合适的。
struct disc
{
public:
disc();
~disc();
void changeRadius(short);
void throwDisc(short, short);
void printLocation() const;
void printInfo() const;
private:
short radius;
short xlocation;
short ylocation;
};
// ^ Exactly the same thing; your approach still won't work, for the same reason
答案 2 :(得分:0)
简单解决方案,重载>
上的objects
运算符,如下所示,以比较类的两个对象的半径。
discOne > discTwo;
你可以根据你的要求重载>
,这是一个简单的
bool disc :: operator > (disc my_disc)
{
if(radius > my_disc.radius)
return true;
else
return false;
}
以上是解决问题的解决方案之一。还有其他方法可以比较其他对象建议的两个对象。使用单独的member
函数(或friend
函数)执行相同的任务。