【发布时间】:2013-03-14 12:13:34
【问题描述】:
这不会破坏封装吗?
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;
}
【问题讨论】:
-
不,也不会从朋友函数的上下文中对
char *成员调用strcpy()。同样,它不是好友,但调用者是。友谊授予与对象相同的特权。所以问问你自己:你能从你的objects成员函数中调用non_friend_pass_private_members()吗? -
不清楚你所说的“打破封装”是什么意思。
-
@VaughnCato 从非好友和非成员函数访问私有成员
-
你必须在类中声明朋友。因此,您可以控制可以访问成员的确切内容。如果您选择传递实际成员,则与在课堂内传递相同。
-
@WhozCraig 我认为他的意思是从朋友函数访问私有变量会破坏封装规则(在这里猜测)
标签: c++ encapsulation friend access-control