#include <iostream>
using namespace std;
class Test
{
// 友元函数可以声明在类中任何地方,但为良好的编程风格,最好声明在如下位置。
friend void Show1(Test &);
friend void Show2(Test &);
public:
Test(int d = 0) :data(d) {}
// void Fun( Test * const this)
void Fun()
{
cout << "data = " << data << endl;
}
int GetData()
{
return data;
}
private:
int data;
};
// 1. 友元函数可以直接访问私有数据成员,也可以通过普通类成员方法访问。
// 2. 但是如果不声明Show1()为Test类的友元函数,则Show1() 函数体中t.data错误,即不能访问类私有数据。
// 3. 类友元函数方法实现不用类作用域运算符。
// 4. 友元函数不必经由一个类对象激活
void Show1(Test &t){
cout << "This is Friend Show1()" << endl;
cout << "t.data = " << t.data << endl;
}
void Show2(Test &t){
cout << "This is Friend Show2()" << endl;
cout << "t.data = " << t.GetData() << endl;
}
void main()
{
// 类对象初始化,首先调用构造函数
Test t(10);
// 类对象通过类普通成员函数访问私有数据成员
t.Fun();
// 友元函数访问直接私有数据成员,不经由对象激活
Show1(t);
// 友元函数通过类普通成员方法访问私有数据成员,不必由对象激活
Show2(t);
// 友元函数注意:
// 1. 友元函数不是类成员函数,它可以访问类的所有成员,一般函数只能访问类中的公有成员。
// 2. 友元函数不受类中的访问权限关键字限制,可以把它放在类的公有、私有或保护部分,但结果一样。
// 3. 某类的友元函数的作用域并非该类的作用域。如果该友元函数是另一类的成员函数,则其作用域为另一类的作用域,否则和一般函数相同。
}
类友元函数(一)
最新推荐文章于 2022-05-20 10:20:04 发布