歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

C++學習之友元函數

為什麼要引入友元函數?

因為我們不能在類的外部訪問類的私有變量。

傳統的訪問方法:

[cpp]
  1. #include <iostream>   
  2. #include <string>   
  3. using namespace std;  
  4.   
  5. class aa  
  6. {  
  7. private:  
  8.     float a;  
  9.     float b;  
  10. public:  
  11.     float &aaa()  
  12.     {  
  13.         return (a);  
  14.     }  
  15.     float &bbb()  
  16.     {  
  17.         return (b);  
  18.     }  
  19. };  
  20.   
  21. aa sum(aa a, aa b)  
  22. {  
  23.     aa c;  
  24.     c.aaa() = a.aaa() + b.aaa();  
  25.     c.bbb() = a.bbb() + b.bbb();  
  26.     return (c);  
  27. }  
  28.   
  29. int main(int argc, char **argv)  
  30. {  
  31.     aa a, b;  
  32.     a.aaa() = 1;  
  33.     a.bbb() = 2;  
  34.     b.aaa() = 3;  
  35.     b.bbb() = 4;  
  36.     aa c = sum(a, b);  
  37.     cout << c.aaa() << endl;  
  38.     cout << c.bbb() << endl;  
  39.   
  40.     return 0;  
  41. }  

引入友元函數之後:

[cpp]
  1. #include <iostream>   
  2. #include <string>   
  3. using namespace std;  
  4.   
  5. class aa  
  6. {  
  7. private:  
  8.     float a;  
  9.     float b;  
  10. public:  
  11.     float &aaa()  
  12.     {  
  13.         return (a);  
  14.     }  
  15.     float &bbb()  
  16.     {  
  17.         return (b);  
  18.     }  
  19.     friend aa sum(aa, aa);  
  20.     friend int main(int argc, char **argv);  
  21. };  
  22.   
  23. aa sum(aa s, aa t)  
  24. {  
  25.     aa c;  
  26.     c.a = s.a + t.a;  
  27.     c.b = s.b + t.b;  
  28.     return (c);  
  29. }  
  30.   
  31. int main(int argc, char **argv)  
  32. {  
  33.     aa a, b;  
  34.     a.a = 1;  
  35.     a.b = 2;  
  36.     b.a = 3;  
  37.     b.b = 4;  
  38.     aa c = sum(a, b);  
  39.     cout << c.a << endl;  
  40.     cout << c.b << endl;  
  41.   
  42.     return 0;  
  43. }  

兩個函數運行結果完全一樣。

對於使用友元:

(1)聲明的位置既可在public區,也可在protected區。友元函數雖然是在類內進行聲明,但它不是該類的成員函數,不屬於任何類。
(2)在類外定義友元函數,與普通函數的定義一樣,一般與類的成員函數放在一起,以便類重用時,一起提供其友元函數。
(3) 友元函數是能訪問類的所有成員的普通函數,一個函數可以是多個類的友元函數,只需在各個類中分別聲明。
(4)友元能使程序精煉,提高程序的效率。
(5)友元破壞了類的封裝,使用時,要權衡利弊,在數據共享與信息隱藏之間選擇一個平衡點。

Copyright © Linux教程網 All Rights Reserved