类友元函数(一)

来源:互联网 发布:淘宝扣分处罚规则 编辑:程序博客网 时间:2024/06/05 21:12
#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. 某类的友元函数的作用域并非该类的作用域。如果该友元函数是另一类的成员函数,则其作用域为另一类的作用域,否则和一般函数相同。}

0 0
原创粉丝点击