程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> [C++基礎]友元函數

[C++基礎]友元函數

編輯:C++入門知識

通常對於普通函數來說,要訪問類的保護成員是不可能的,如果想這麼做那麼必須把類的成員都生命成為public(共用的),然而這做帶來的問題遍是任何外部函數都可以毫無約束的訪問它操作它,c++利用friend修飾符,可以讓一些你設定的函數能夠對這些保護數據進行操作,避免把類成員全部設置成public,最大限度的保護數據成員的安全。
友元能夠使得普通函數直接訪問類的保護數據,避免了類成員函數的頻繁調用,可以節約處理器開銷,提高程序的效率,但矛盾的是,即使是最大限度的保護,同樣也破壞了類的封裝特性,這即是友元的缺點,在現在cpu速度越來越快的今天我們並不推薦使用它,但它作為c++一個必要的知識點,一個完整的組成部分。
在類裡聲明一個普通函數,在前面加上friend修飾,那麼這個函數就成了該類的友元,可以訪問該類的一切成員。

 

 #include <iostream>      
using namespace std;   
class Internet     
{     
public:     
    Internet(char *name,char *address)     
    {     
        strcpy(Internet::name,name);     
        strcpy(Internet::address,address);      
    }   
    friend void ShowN(Internet &obj);//友元函數的聲明    
private:     
    char name[20];   
    char address[20];   
};   
 
 
void ShowN(Internet &obj)//函數定義,不能寫成,void Internet::ShowN(Internet &obj)    
{   
    cout<<obj.name<<endl;   
}   
void main()     
{   
    Internet a("中國軟件開發實驗室","www.cndev-lab.com");   
    ShowN(a);   
    cin.get();   
}  

#include <iostream>   
using namespace std; 
class Internet   
{   
public:   
    Internet(char *name,char *address)   
    {   
        strcpy(Internet::name,name);   
        strcpy(Internet::address,address);    
    } 
    friend void ShowN(Internet &obj);//友元函數的聲明 
private:   
    char name[20]; 
    char address[20]; 
}; 


void ShowN(Internet &obj)//函數定義,不能寫成,void Internet::ShowN(Internet &obj) 
{ 
    cout<<obj.name<<endl; 
} 
void main()   
{ 
    Internet a("中國軟件開發實驗室","www.cndev-lab.com"); 
    ShowN(a); 
    cin.get(); 


} 上面的代碼通過友元函數的定義,我們成功的訪問到了a對象的保護成員name,友元函數並不能看做是類的成員函數,它只是個被聲明為類友元的普通函數,所以在類外部函數的定義部分不能夠寫成void Internet::ShowN(Internet &obj),這一點要注意。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved