前情回顧🎉welcome🎉
??博主介紹:一名大一的智能制造專業(yè)學(xué)生,在學(xué)習(xí)C/C++的路上會(huì)越走越遠(yuǎn),后面不定期更新有關(guān)C/C++語(yǔ)法,數(shù)據(jù)結(jié)構(gòu),算法,Linux,ue5使用,制作游戲的心得,和大家一起共同成長(zhǎng)。
??C++專欄:C++爬塔日記
😘博客制作不易,👍點(diǎn)贊+?收藏+?關(guān)注
上回到,在進(jìn)入第三層后,我學(xué)習(xí)了隱藏在編譯器內(nèi)的一種神秘力量——this指針,this指針可以讓編譯器分清是哪個(gè)對(duì)象在調(diào)用類內(nèi)的成員函數(shù),同時(shí),隨著層數(shù)的增高,我對(duì)C++的理解越來(lái)越深,也越來(lái)越發(fā)覺(jué)C++的恐怖…
友元
- 🚄上章地址:第三層:C++對(duì)象模型和this指針
“上到這里來(lái),你也是一個(gè)有緣人了,老夫看你有大機(jī)緣在身,這層內(nèi)容不難,友元,有緣人祝你好運(yùn),哈哈哈哈哈…”這道聲音在我踏入到第四層的那一刻響起,“有緣,友元嗎?”我小聲嘀咕著,看向了面前的石碑上。
友元的概念在生活中,每個(gè)人都有一些可以讓大眾知道并且訪問(wèn)的,比如名字,也有一些是不想讓大眾訪問(wèn)的,比如手機(jī)、汽車這些私密物品,但是如果經(jīng)過(guò)本人同意,該人的好朋友就可以對(duì)私密物品進(jìn)行訪問(wèn),同樣,在C++中,也有私有屬性(private),可以讓類外一些特殊的函數(shù)或者類進(jìn)行訪問(wèn),而這些特殊的函數(shù)或者類就需要用到友元。
友元的目的友元的關(guān)鍵字
- 友元的目的就是讓一個(gè)函數(shù)或者類訪問(wèn)另一個(gè)類內(nèi)的私有成員
友元的兩種種用法
- 友元的關(guān)鍵字是friend,也就是中文的朋友。
全局函數(shù)做友元
- 全局函數(shù)做友元
- 類做友元
當(dāng)程序員想讓全局函數(shù)訪問(wèn)一個(gè)類內(nèi)的私有屬性時(shí),只需要將函數(shù)聲明在類內(nèi)的最上方,并且在函數(shù)發(fā)返回類型之前加上友元的關(guān)鍵字friend:
#include#includeusing namespace std;
class person
{friend void test1();
public:
person()
{_name = "張三";
_car = "奧迪A8";
_phone = "iphone 100 por max";
}
string _name;
private:
string _car;
string _phone;
};
void test1()
{person p1;
cout<< "現(xiàn)在在訪問(wèn):"<< p1._name<< endl;
cout<< "現(xiàn)在在訪問(wèn):"<< p1._name<< "的"<< p1._car<< endl;
cout<< "現(xiàn)在在訪問(wèn):"<< p1._name<< "的"<< p1._phone<< endl;
}
int main()
{test1();
return 0;
}
那這里可能會(huì)有人有疑問(wèn),是不是直接在類內(nèi)聲明就可以,不加前面friend是不是也可以訪問(wèn)?實(shí)驗(yàn)一下:
#include#includeusing namespace std;
class person
{void test1();
public:
person()
{_name = "張三";
_car = "奧迪A8";
_phone = "iphone 100 por max";
}
string _name;
private:
string _car;
string _phone;
};
void test1()
{person p1;
cout<< "現(xiàn)在在訪問(wèn):"<< p1._name<< endl;
cout<< "現(xiàn)在在訪問(wèn):"<< p1._name<< "的"<< p1._car<< endl;
cout<< "現(xiàn)在在訪問(wèn):"<< p1._name<< "的"<< p1._phone<< endl;
}
int main()
{test1();
return 0;
}
可以看到報(bào)錯(cuò)是不可訪問(wèn),所以證明,不僅僅需要在類內(nèi)聲明函數(shù)還需要加上關(guān)鍵字friend。
類做友元,通過(guò)表面意思得知,是讓一個(gè)類做另一個(gè)類的友元,然后可以用友元這個(gè)類訪問(wèn)把它當(dāng)作友元的這個(gè)類,要注意的來(lái)了:
- 要訪問(wèn)的話,需要讓當(dāng)作友元這個(gè)類成為友元類內(nèi)的一個(gè)對(duì)象成員,這個(gè)對(duì)象成員
好是個(gè)指針,在創(chuàng)建對(duì)象時(shí),利用new操作符申請(qǐng)一塊對(duì)象成員大小的空間讓指針指向- 注意,因?yàn)槭褂昧薾ew操作符,在程序快要結(jié)束的時(shí)候,記得使用delete釋放空間,并且對(duì)指針進(jìn)行置空,以免造成野指針
#include#includeusing namespace std;
class person1;
class person
{friend class person1;
public:
person()
{_name = "張三";
_car = "奧迪A8";
_phone = "iphone 100 por max";
}
string _name;
private:
string _car;
string _phone;
};
class person1
{public:
void test()
{cout<< "現(xiàn)在訪問(wèn)的是:"<< p->_name<< endl;
cout<< "現(xiàn)在訪問(wèn)的是:"<< p->_name<< "的"<< p->_car<< endl;;
cout<< "現(xiàn)在訪問(wèn)的是:"<< p->_name<< "的"<< p->_phone<< endl;;
}
person *p;
};
void test1()
{person1 pp1;
pp1.p = new person;
pp1.test();
delete pp1.p;
pp1.p = NULL;
}
int main()
{test1();
return 0;
}
函數(shù)成員其實(shí)也可以在類外進(jìn)行定義,是什么意思呢?其實(shí)就是將函數(shù)成員在類內(nèi)進(jìn)行聲明,在類外進(jìn)行定義,定義時(shí)同樣要讓編譯器知道是類內(nèi)成員,所以也要在函數(shù)名前加類名::類外聲明寫法是
返回值 類名::函數(shù)名 ();
當(dāng)時(shí)構(gòu)造函數(shù)時(shí)
類名::類名 ();
可以進(jìn)行驗(yàn)證:
#include#includeusing namespace std;
//class person1;
//
class person
{public:
person();
void test1();
string _name;
string _car;
string _phone;
};
person::person()
{_name = "張三";
_car = "奧迪A8";
_phone = "iphone 100 por max";
}
void person::test1()
{cout<< "現(xiàn)在訪問(wèn)的是:"<< _name<< endl;
cout<< "現(xiàn)在訪問(wèn)的是:"<< _name<< "的"<< _car<< endl;
cout<< "現(xiàn)在訪問(wèn)的是:"<< _name<< "的"<< _phone<< endl;
}
int main()
{person p1;
p1.test1();
return 0;
}
可以看到時(shí)正常運(yùn)行的。
巨大石碑轟然倒塌,一陣煙土飄起,散去之后,只見(jiàn)一個(gè)身影向第五層走去…
本章知識(shí)點(diǎn)(圖片形式)😘預(yù)知后事如何,關(guān)注新專欄,和我一起征服C++這座巨塔
🚀專欄:C++爬塔日記
🙉都看到這里了,留下你們的👍點(diǎn)贊+?收藏+📋評(píng)論吧🙉
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)站欄目:第四層:友元與函數(shù)成員別樣定義-創(chuàng)新互聯(lián)
文章分享:http://chinadenli.net/article6/ejgig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、商城網(wǎng)站、微信公眾號(hào)、網(wǎng)頁(yè)設(shè)計(jì)公司、網(wǎng)站收錄、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容