友元函数的几种形式
(1)、友元函數
友元函數定義后可以訪問類對象的所有成員,包含私有公有和保護成員
友元函數必須在類定義時進行聲明,聲明時在函數前面添加 friend關鍵字,該聲明可以放到公有或者私有成員中,
友元函數的聲明方式:
friend <s數據類型》 《友元函數》<參數表》
友元函數需要注意:
1、友元函數不是類函數,不用加作用與::
2、友元函數不是類的成員,不鞥直接引用對象成員的名字。也不能通過tthis指針引用對象成員,友元函數一般都帶有一個類的入口參數,
例如 ?area(rectangke &obj)
3]、當友元函數訪問多個類時,可以將該友元函數定義多個類的友元函數
(2)、友元成員
如果一個類的成員函數時另一個類的成員函數,則稱這個成員函數時友元成員。通過友元成員不僅可以訪問自己累對象中所有的成員,還可以訪問其他類對象的成員,這種方法可以使函數同時訪問兩個雷。
<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>注意點:
1、類的成員函數的成為友元函數時,應在類中表明函數的作用域
2、調用的類對象按順序看如果沒有,應在類的最前面聲明類,例如 ?class boy,因為girl類之間如果沒有聲明g該類,則友元函數無法調用
(3)友元類
如果一個類作為另一個類的友元,稱這個類為友元類,當一個類時另一個類的友元時,這個類的所有成員函數都成為另一個類的友元函數,,友元類中的所有成員函數都可以通過對象名直接訪問另一個類中的所有成員。
友元類的聲明可以方阿斗類中的任一位置,
?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>總結
- 上一篇: MATLAB 基本数据类型和调用方式
- 下一篇: c++ 类的继承