友元函数的几种形式
(1)、友元函數(shù)
友元函數(shù)定義后可以訪問類對(duì)象的所有成員,包含私有公有和保護(hù)成員
友元函數(shù)必須在類定義時(shí)進(jìn)行聲明,聲明時(shí)在函數(shù)前面添加 friend關(guān)鍵字,該聲明可以放到公有或者私有成員中,
友元函數(shù)的聲明方式:
friend <s數(shù)據(jù)類型》 《友元函數(shù)》<參數(shù)表》
友元函數(shù)需要注意:
1、友元函數(shù)不是類函數(shù),不用加作用與::
2、友元函數(shù)不是類的成員,不鞥直接引用對(duì)象成員的名字。也不能通過tthis指針引用對(duì)象成員,友元函數(shù)一般都帶有一個(gè)類的入口參數(shù),
例如 ?area(rectangke &obj)
3]、當(dāng)友元函數(shù)訪問多個(gè)類時(shí),可以將該友元函數(shù)定義多個(gè)類的友元函數(shù)
(2)、友元成員
如果一個(gè)類的成員函數(shù)時(shí)另一個(gè)類的成員函數(shù),則稱這個(gè)成員函數(shù)時(shí)友元成員。通過友元成員不僅可以訪問自己累對(duì)象中所有的成員,還可以訪問其他類對(duì)象的成員,這種方法可以使函數(shù)同時(shí)訪問兩個(gè)雷。
<span style="font-size:18px;">#include<iostream> #include<string> using namespace std; class boy;class girl { private:char *name;int age; public:girl(char* n, int a){name = new char[strlen(n) - 1];strcpy(name, n);age = a;}void prt(boy &b);~girl(){delete name;} }; class boy { private :char* name;int age; public:boy(char*n, int a){name = new char[strlen(n) - 1];strcpy(name, n);age = a;}friend void girl:: prt(boy& b);~boy(){delete name;}};void girl::prt(boy& b) {cout << "girl" << name << age << endl;cout << "boy" << b.name << b.age << endl; }int main() {girl g1("jgb", 19);boy b1("dfgb", 10);g1.prt(b1);system("pause");return 0; }</span>注意點(diǎn):
1、類的成員函數(shù)的成為友元函數(shù)時(shí),應(yīng)在類中表明函數(shù)的作用域
2、調(diào)用的類對(duì)象按順序看如果沒有,應(yīng)在類的最前面聲明類,例如 ?class boy,因?yàn)間irl類之間如果沒有聲明g該類,則友元函數(shù)無法調(diào)用
(3)友元類
如果一個(gè)類作為另一個(gè)類的友元,稱這個(gè)類為友元類,當(dāng)一個(gè)類時(shí)另一個(gè)類的友元時(shí),這個(gè)類的所有成員函數(shù)都成為另一個(gè)類的友元函數(shù),,友元類中的所有成員函數(shù)都可以通過對(duì)象名直接訪問另一個(gè)類中的所有成員。
友元類的聲明可以方阿斗類中的任一位置,
?friend class <友元類名》
<span style="font-size:18px;">#include<iostream> #include<string> using namespace std; class boy;class girl { private:char *name;int age; public:girl(char* n, int a){name = new char[strlen(n) - 1];strcpy(name, n);age = a;}void prt(boy &b);~girl(){delete name;} }; class boy { private :char* name;int age; public:boy(char*n, int a){name = new char[strlen(n) - 1];strcpy(name, n);age = a;}friend calss girl;~boy(){delete name;}};void girl::prt(boy& b) {cout << "girl" << name << age << endl;cout << "boy" << b.name << b.age << endl; }int main() {girl g1("jgb", 19);boy b1("dfgb", 10);g1.prt(b1);system("pause");return 0; }</span>總結(jié)
- 上一篇: MATLAB 基本数据类型和调用方式
- 下一篇: 三角形的内接圆