C++ Friend 函数
示例
类或结构可以声明它的朋友的任何功能。如果函数是类的朋友,则它可以访问其所有受保护的成员和私有成员:
//前向声明函数。
void friend_function();
void non_friend_function();
class PrivateHolder {
public:
PrivateHolder(int val) : private_value(val) {}
private:
int private_value;
//声明为朋友的功能之一。
friend void friend_function();
};
void non_friend_function() {
PrivateHolder ph(10);
//编译错误:private_value是私有的。
std::cout <<ph.private_value<< std::endl;
}
void friend_function() {
//确定:朋友可以访问私有价值观。
PrivateHolder ph(10);
std::cout <<ph.private_value<< std::endl;
}访问修饰符不会更改朋友的语义。朋友的公开声明,受保护声明和私有声明是等效的。
朋友声明不被继承。例如,如果我们子类化PrivateHolder:
class PrivateHolderDerived : public PrivateHolder {
public:
PrivateHolderDerived(int val) : PrivateHolder(val) {}
private:
int derived_private_value = 0;
};并尝试访问其成员,我们将获得以下信息:
void friend_function() {
PrivateHolderDerived pd(20);
//好。
std::cout <<pd.private_value<< std::endl;
//编译错误:派生的私有值是私有的。
std::cout <<pd.derived_private_value<< std::endl;
}请注意,PrivateHolderDerived成员函数无法访问PrivateHolder::private_value,而朋友函数可以访问。
热门推荐
6 保研的祝福语简短
10 年轻20岁祝福语简短
11 朋友结婚祝福语信息简短
12 女孩婚礼贺卡祝福语简短
13 30段点歌简短祝福语
14 虎年春节祝福语图文简短
15 写给后妈祝福语大全简短
16 简短回复生日祝福语
17 校长送毕业祝福语简短
18 毕业立体贺卡祝福语简短