操作员重载是否允许在没有朋友的情况下访问私有成员?

时间:2018-02-17 19:09:55

标签: c++

下面的代码显示了一个简单的运算符重载+到类Person。根据对象的重载,我在运算符重载中访问p.id时会出错。为什么我没有得到它?

#include <iostream>
#include <vector>
using namespace std;


namespace friendDemo {
    class Person {
    private:
        int id;
    public:
        int operator+(const Person& p);
        Person(int id);
    };

    int Person::operator+(const Person& p) {
        // accessing the private member
        cout << p.id << endl;
        return p.id + id;
    }

    Person::Person(int id) : id(id) {
        cout << "Created" << endl;
    }

    void test() {
        Person p1 {1};
        Person p2 {2};
        cout << "p1 + p2 = " << (p1 + p2) << endl;
    }
};



int main() {

    friendDemo::test();

    return 0;
}

输出:

Created
Created
p1 + p2 = 2
3

我是否正在进行适当的运算符重载?根据文字,我应该使用友元功能访问私人会员,但他的代码是有线的(没有朋友访问私人会员)

0 个答案:

没有答案