如何在运算符重载中访问私有变量?

时间:2016-04-09 19:09:46

标签: c++

如何在此代码中的运算符重载(obj.real,obj.imag,res.real,res.imag)中访问私有变量。有人可以解释

#include<iostream>
using namespace std;

class Complex {
private:
    int real, imag;
public:
    Complex(int r = 0, int i =0)  {real = r;   imag = i;}

    // This is automatically called when '+' is used with
    // between two Complex objects
    Complex operator + (Complex const &obj) {
         Complex res;
         res.real = real + obj.real;
         res.imag = imag + obj.imag;
         return res;
    }
    void print() { cout << real << " + i" << imag << endl; }
};

int main()
{
    Complex c1(10, 5), c2(2, 4);
    Complex c3 = c1 + c2; // An example call to "operator+"
    c3.print();
}

2 个答案:

答案 0 :(得分:0)

您的operator +应该能够访问所有私有变量,因为它是同一个类的一部分。我觉得这里没问题。但是,如果您碰巧在课外有函数,则可以使用“friend”关键字(通常与stream一起使用)。 你有编译器的错误吗?

答案 1 :(得分:0)

C ++中的访问修饰符(public,private,protected)适用于整个类,而不是单个对象。因此,如果一个类成员是私有的,那么该类的任何成员函数都可以访问它,无论调用成员函数的是哪个对象。

这不是特定于运算符重载的。它适用于所有成员函数。