比较一个类的两个对象之间的数据

时间:2018-02-15 16:11:31

标签: c++

所以,我创建了一个类,然后构造了该类的两个独立实例:

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

或类似的东西。但是,类的语法调用与该类绑定的函数。对于漫无边际的对不起,但我无法明确表达 - 可能是为什么我很难通过自己的互联网搜索找到任何指导。

3 个答案:

答案 0 :(得分:7)

三种方式:

  1. 使用getter方法getRadius() const {return radius;} 并像往常一样进行比较。

  2. 如果您想直接比较两个对象,请对operator<operator>使用重叠(但这似乎不是正确的情况。

  3. 声明友方函数bool compareRadius(const Disc& discOne, const Disc& discTwo)以执行比较而不直接涉及对象。

  4. 当然最简单的方法是第一种。我刚刚展示了一些其他类似问题可以考虑的选项。

    编辑:答案#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函数)执行相同的任务。