这不会破坏封装吗?
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;
}
答案 0 :(得分:3)
通过声明friend void pass_private_members(B&)
您告诉编译器,您信任pass_private_members
来处理B
的私有成员。它对私有成员的作用不是编译器所关注的。这与调用non_friend_pass_private_members
。
答案 1 :(得分:2)
它确实打破了封装规则。但是C ++在某种程度上打破了许多“纯粹”OOPL的规则。
让我想起了我最喜欢的C ++引语:
C ++,朋友可以访问私人的唯一语言!