C ++:朋友函数传递给非朋友

时间:2013-03-25 04:23:45

标签: c++ encapsulation friend access-control

这不会破坏封装吗?

B.h:

class B{
    int x, y;
public:
    B() : x(1), y(1) {}
    B(const B& obj) : x(obj.x), y(obj.y) {}

    int getx();
    int gety();

    friend void pass_private_members(B&);
};

B.cpp

void non_friend_pass_private_members(int& x);

int B::getx(){
    return this->x;
}

int B::gety(){
    return this->y;
}

void pass_private_members(B& obj){
    non_friend_pass_private_members(obj.x);
}

void non_friend_pass_private_members(int& x){
    x++;
}

的main.cpp

int main(){
    B obj;
    pass_private_members(obj);
    cout << obj.getx() << endl;
    return 0;
}

2 个答案:

答案 0 :(得分:3)

通过声明friend void pass_private_members(B&)您告诉编译器,您信任pass_private_members来处理B的私有成员。它对私有成员的作用不是编译器所关注的。这与调用non_friend_pass_private_members

的成员函数没有什么不同

答案 1 :(得分:2)

它确实打破了封装规则。但是C ++在某种程度上打破了许多“纯粹”OOPL的规则。

让我想起了我最喜欢的C ++引语:

C ++,朋友可以访问私人的唯一语言!

相关问题