在课堂外重载操作符

时间:2016-06-18 17:42:33

标签: c++ class operator-overloading overloading

所以,我有一个简单的课程:

class complex{

private:

    double a,b;

public:

    void setA(double a){ this->a=a; }

    void setB(double b){ this->b=b; }

    double getA(){ return a; }
    double getB(){ return b; }

    friend complex operator+(const complex&, const complex&);
};

我在这里有实际的重载运算符:

complex operator+(const complex& x, const complex& y){

    complex c;
    c.a=x.a+y.a;
    c.b=x.b+y.b;
    return c;
}

我必须让操作符在函数外部重载。为了能够访问私有变量(那些也必须是私有的)我和该函数一起成为了这个类的朋友。我不知道这是否是正确的做法,但至少它是有效的。 我希望能够为两个成员添加一个整数。在main()中:

complex a;
a.setA(2);
a.setB(3);
a+5;

会导致a.a = 7和a.b = 8。课堂内的这种过载非常容易(再次,不知道这是不是很好的解决方案,如果不是,请纠正我):

complex operator+(int x){

    this->a+=x;
    this->b+=x;
}

但是我不知道如何在课外进行,因为我不能使用“this”指针。

1 个答案:

答案 0 :(得分:3)

解决这类问题的常用方法是使用成员函数定义算术运算符的自反版本和定义非自反版本的自由函数,并使用自反版本实现。不需要朋友声明。例如:

class complex {
public:
    complex& operator+=(const complex& rhs) {
        x += rhs.x;
        y += rhs.y;
        return *this;
    }
private:
    double x, y;
};

complex operator+(const complex& lhs, const complex& rhs) {
    complex result = lhs;
    result += rhs;
    return result;
}

a+5更改a的值是不寻常的,但如果您真的想要,请将operator+(int)作为成员。但是,用户通常希望a+5保持a不变,而a += 5会修改a