面向?qū)ο螅–++) 之 友元函數(shù)

背景:在某些情況下,特別是在對(duì)某些成員函數(shù)多次調(diào)用時(shí),由于參數(shù)傳遞,類型檢查和安全性檢查等都需要時(shí)間開銷,而影響程序的運(yùn)行效率。為了解決上述問題,提出一種使用友元的方案。

△友元可以是一個(gè)函數(shù),該函數(shù)被稱為友元函數(shù);友元也可以是一個(gè)類,該類被稱為友元類。友元函數(shù)的特點(diǎn)是能夠訪問類中的私有成員的非成員函數(shù)。友元函數(shù)從語法上看,它與普通函數(shù)一樣,即在定義上和調(diào)用上與普通函數(shù)一樣

友元函數(shù)是可以直接訪問類的私有成員的非成員函數(shù)。它是定義在類外的普通函數(shù),它不屬于任何類,但需要在類的定義中加以聲明,聲明時(shí)只需在友元的名稱前加上關(guān)鍵字friend。

☆友元函數(shù)的參數(shù):
因?yàn)橛言瘮?shù)沒有this指針,則參數(shù)要有三種情況:
要訪問非static成員時(shí),需要對(duì)象做參數(shù);
要訪問static成員或全局變量時(shí),則不需要對(duì)象做參數(shù);
如果做參數(shù)的對(duì)象是全局對(duì)象,則不需要對(duì)象做參數(shù);

☆友元函數(shù)的位置:
因?yàn)橛言瘮?shù)是類外的函數(shù),所以它的聲明可以放在類的私有段或公有段且沒有區(qū)別。

☆友元函數(shù)和類的成員函數(shù)的區(qū)別:
成員函數(shù)有this指針,而友元函數(shù)沒有this指針。
友元函數(shù)是不能被繼承的,就像父親的朋友未必是兒子的朋友。

以下為一個(gè)例子:

#include<iostream>
using std::cout;
using std::cin;
using std::endl;

class CTyre{
    private:
        int radius;
        int width;
    public:
        CTyre(){ cout<<"CTyre contructor"<<endl;}
        ~CTyre(){ cout<<"CTyre destructor"<<endl;}
        //友元函數(shù)的聲明(在類中)
        friend void CCar(const int &radius,const int &width);
};//別忘了分號(hào)

 //友元函數(shù)的定義(在類外)
void CCar(int &radius,int &width)
        {
            cout<<"汽車輪胎的半徑為:"<<radius<<endl; 
            cout<<"汽車輪胎的厚度為:"<<width<<endl;
        }

int main(){
    int tr,tw;
    cout<<"請(qǐng)輸入汽車輪胎的半徑:"<<endl;
    cin>>tr;
    cout<<"請(qǐng)輸入汽車輪胎的厚度:"<<endl;
    cin>>tw;
    CCar(tr,tw);    
    return 0;
}
作者:華中師范大學(xué) 計(jì)算機(jī)學(xué)院 蒲東齊
文本作者才疏學(xué)淺,如有錯(cuò)誤,請(qǐng)指正!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,676評(píng)論 1 51
  • 重新系統(tǒng)學(xué)習(xí)下C++;但是還是少了好多知識(shí)點(diǎn);socket;unix;stl;boost等; C++ 教程 | 菜...
    kakukeme閱讀 20,455評(píng)論 0 50
  • C++文件 例:從文件income. in中讀入收入直到文件結(jié)束,并將收入和稅金輸出到文件tax. out。 檢查...
    SeanC52111閱讀 3,103評(píng)論 0 3
  • 1.面向?qū)ο蟮某绦蛟O(shè)計(jì)思想是什么? 答:把數(shù)據(jù)結(jié)構(gòu)和對(duì)數(shù)據(jù)結(jié)構(gòu)進(jìn)行操作的方法封裝形成一個(gè)個(gè)的對(duì)象。 2.什么是類?...
    少帥yangjie閱讀 5,124評(píng)論 0 14
  • 簡(jiǎn)書啟航錄 緣分的巧合 ,讓我們相聚,去點(diǎn)綴回憶的燦爛。純粹的情感, 攜牽著唯一的心動(dòng)。你我瞬間的永恒, 交織著彼...
    陽光下的妃子閱讀 469評(píng)論 0 0

友情鏈接更多精彩內(nèi)容