C++之友元函数和友元类讲解
创始人
2024-03-17 15:40:34
0

目录

0.C++类中成员变量和成员函数的访问权限

<0>.C++ 类中可以有 public、protected、private 三种属性的成员。

<1>.外部类可以通过实例化对象,可以访问public成员。

<2>.只有本类中的函数可以访问本类的 private 成员。

<3>.例外情况:通过友元(friend)

1.友元函数

<1>.友元函数定义

<2>.程序例子

2.友元类

<1>.友元类定义

<2>.程序例子


0.C++类中成员变量和成员函数的访问权限

<0>.C++ 类中可以有 public、protected、private 三种属性的成员。

<1>.外部类可以通过实例化对象,可以访问public成员。

<2>.只有本类中的函数可以访问本类的 private 成员。

<3>.例外情况:通过友元(friend)

     可以使外部类访问当前类的public、protected、private全部属性的成员函数和成员变量.

1.友元函数

<1>.友元函数定义

 在当前类以外定义的、不属于当前类的函数也可以在类中声明,但要在前面加 friend 关键字,这样就构成了友元函数。

 友元函数可以是不属于任何类的成员函数,也可以是其他类的成员函数。

友元函数可以访问当前类中的所有成员,包括 public、protected、private 属性的。

<2>.程序例子

#include 
using namespace std;class Box{
public:Box(int wid): m_width(wid){cout << "wid = " << wid <%s(), m_width = %d\n",__FUNCTION__,box.m_width);
}int main( ){Box box(55);test_friend(box);return 0;
}

2.友元类

<1>.友元类定义

C++的friend关键字,不仅可以将一个函数声明为一个类的“朋友”,还可以将整个类声明为另一个类的“朋友”,这就是友元类。友元类中的所有成员函数都是另外一个类的友元函数。

 如果将类B声明为类A的友元类,那么类 B 中的所有成员函数都是类 A 的友元函数,可以访问类 A 的所有成员,包括 public、protected、private 属性的。

<2>.程序例子

#include 
using namespace std;//提前声明Address类
class Address;  class Student{
public:Student(char *name): m_name(name){printf("Student::m_name = %s\n", m_name);}void show(Address *addr);private:char *m_name;
};class Address{
public:Address(char *addr): m_addr(addr){//printf("Address::m_addr = %s\n", m_addr);}//将Student类声明为Address类的友元类,可以访问类Address的所有成员,包括public、protected、private属性的.friend class Student;
private:void test_private(){printf("xxx----->Address::%s(), line = %d\n",__FUNCTION__,__LINE__);}char *m_addr;protected:void test_protected(){printf("xxx----->Address::%s(), line = %d\n",__FUNCTION__,__LINE__);}
};void Student::show(Address *addr){cout<< "private::m_addr = " << addr->m_addr  <test_private();addr->test_protected();
}int main(){Student *stu = new Student("ZhangSan");Address *addr = new Address("china");stu->show(addr);return 0;
}

相关内容

热门资讯

严重违背人伦底线,犯罪手段特别... 据“遵义审判”消息,2025年12月26日,贵州省遵义市中级人民法院依法对被告人刘仲杰故意杀人案进行...
原创 死... 死刑判决能否抚平受害者家属的创伤?法律与心理的双重拷问 当一纸死刑判决书尘埃落定,法庭外的受害者家属...
贵州工会“一函两书”典型案例⑩... 编者按:“一函两书”制度,是工会组织开展劳动法律监督,联合检察院、法院、人社等部门提醒用人单位落实好...
建元信托4.98亿诉讼纠纷再起... 今年以来,建元信托遭遇11起诉讼案件,包括2起大额诉讼。 文/每日财报 楚风 建元信托的诉讼风险仍...
【学政策·人事人才篇】取得哪些... 来源:人力资源和社会保障部微信公众号
“严重违背人伦、道德、法律底线... 贵州省遵义市凤冈县男子刘仲杰离婚冷静期间,将10岁的儿子和7岁的女儿毒杀,此事引发关注。12月26日...
文典律师首席合伙人、主任宋杨东... 2025年12月15日,成都市律师协会金牛律师工作委员会组织金牛区的部分律所主任前往上海申浩律师事务...
刘仲杰,严重违背人伦底线,犯罪... 据“遵义审判”消息,12月26日,贵州省遵义市中级人民法院依法对被告人刘仲杰故意杀人案进行一审公开宣...
12亿元项目背后|蓝天彬律师《... 近年来,“受贿行贿一起查”,成了一个反腐热词。 我的当事人赵赫(化名),涉嫌非国家工作人员受贿罪,...
张家口住房公积金政策新变化,与... 2025年9月,住房公积金新政正式在全国范围内实施,各地积极推进。12月24日,在张家口市政府新闻办...