如何在运算符重载时调用另一个成员函数(C ++)

时间:2015-05-15 10:38:15

标签: c++ operator-overloading

如何在我的定义中使用大于运算符magnitude()的函数重载的成员函数(在本例中为>)?运算符应比较Vector2D也是其成员的类magnitude()的两个对象的大小。我收到以下内容:

  

错误C2662:'double Vector2D :: magnitude(void)':无法将'this'>指针从'const Vector2D'转换为'Vector2D&'

 #include <iostream>
        #include <math.h>
        #include <string>
        using namespace std;

        //***************************  Class Definition  ***************************

        class Vector2D {
        public:
            double i, j;
            Vector2D();                     // Default constructor
            Vector2D(double, double);       // Constructor for initializing
            double  magnitude();            // compute and return the magnitude
            bool operator> (const Vector2D& right); // greater than                      
        };

        //function definitions:

        //default constructor
        Vector2D::Vector2D() {
            i = 1;
            j = 1;

        }
        /* constructor*/
        Vector2D::Vector2D(double x, double y) {
            i = x;
            j = y;
        }

        /* magnitude funciton */
        double Vector2D::magnitude()
        {
            return sqrt(pow(i, 2) + pow(j, 2));
        }

       ******* //greater than Overload ************

        bool Vector2D::operator> (const Vector2D& right) {
            if (magnitude() > right.magnitude())
            {
                return true;
            }
            else
            {
                return false;
            }
        }

    ***********************************************

2 个答案:

答案 0 :(得分:1)

两个变化:

  • bool Vector2D::operator> (const Vector2D& right) const
  • double Vector2D::magnitude() const

所有只读函数都应标记为 const 。您可以通过从const的参数中删除> operator来解决错误,但这样做不会很好。

答案 1 :(得分:1)

问题是您的功能未被声明为const,因此无法应用于常量对象。这很容易解决:

double  magnitude() const;
bool operator> (const Vector2D& right) const;

如果效率很重要,您可能希望在比较幅度时避免使用不必要的平方根:

double square_magnitude() const {return i*i + j*j;}
bool operator> (const Vector2D& right) const {
    return square_magnitude() > right.square_magnitude();
}