【问题标题】:Overloading operator< doesn't work for pointer of a claas重载 operator< 不适用于 claas 的指针
【发布时间】:2020-06-20 19:15:22
【问题描述】:

如何重载运算符“

Operator

class Point
{
    int x, y;

public:

    bool operator< (const Point* &p) const 
    { 
        if (x == p->x)
            return y < p->y;
        else
            return x < p->x;
    }
    bool operator< (const Point &p) const 
    { 
        if (x == p.x)
            return y < p.y;
        else
            return x < p.x;     
    }

    Point (int a, int b)
    {
        x = a;
        y = b;
    }
};

这里我测试重载函数。在这两种情况下,我的程序都应该返回 false

    Point* a = new Point(1,2);
    Point* b = new Point(0,0);

    Point c = Point(1,2);
    Point d = Point(0,0);

    cout<< boolalpha << (a<b) << '\n';  <- always returns true
    cout<< boolalpha << (c<d) << '\n';  <- returns false

【问题讨论】:

  • 第一个重载声明在“Point”和“指向指​​针”之间声明了一个&lt; 重载。这不是两个“pointers to Point”之间的&lt; 的重载。

标签: c++ class pointers operator-overloading


【解决方案1】:

您不能为 operator+(int, double)operator&lt;(int*int*) 等内置类型重载运算符。这根本不可能。事实上,(a&lt;b) 的行为是未指定的,因为您正在比较两个不相关的指针(有关更多详细信息,请参阅this 答案)。但是你可以:

  1. 在比较之前取消引用指针。
  2. 创建像comparePointPointers 这样的命名函数并将其用作常规函数。
  3. 创建智能指针,将它们包裹在指针周围,重载运算符以进行比较。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-26
    • 2014-06-22
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多