本文主要介绍一下C++中的友元函数和友元类的使用。
1. 友元函数
其实友元函数又可以分为:
1.1 普通友元函数
代码中有一个全局函数,该函数想要去访问某个类的成员变量(该类的成员变量是private
的,且该类并未提供任何获取其私有成员变量的public
方法),这时候可以在这个类中把该全局函数声明为友元函数
,这样这个全局函数
就具备了能够获取那个类的私有成员变量的资格。
注:
1)普通友元函数不是类成员函数,而是一个类外的函数,但是可以访问类所有成员。
2) 可以将普通友元函数声明在类的任何一个section(public/protected/private)
参看如下示例,通过友元函数获取Person对象的各字段信息(test.cpp):
编译运行:
# gcc -o test test.cpp -lstdc++
# ./test
name: ivan1001 age: 20 sex: male
1.2 友成员函数
假设有两个类,分别为class A
和class B
。class A的一个成员函数想访问class B的私有成员变量,此时我们可以在class B中将class A的成员函数声明为友元函数。
参看如下示例,打印Person类的详细信息(包含姓名,年龄,性别,省份,城市,街道):
编译运行:
# gcc -o test test.cpp -lstdc++
# ./test
province: Guangdong city: Shenzhen district: Nanshan
2. 友元类
友元类则更为简单,可以将class A声明为class B的友元类,那么class A就拥有了能够访问class B所有成员的资格,包括private、protected、public的。
参看如下示例:
上述,我们称class Person是class Address的友元类。
编译运行:
# gcc -o test test.cpp -lstdc++
# ./test
province: Guangdong city: Shenzhen district: Nanshan
需要注意的是:
[参看]: