爲了把C++的友元講的通俗易懂,我就從這個地球上一種很神奇的生物——女人,提及。衆所周知,女生不肯意讓別人知道的兩個祕密,一個是年齡,另外一個就是體重了(雖然已經知道不少年了,可是依然不懂,爲何女生不肯意讓別人知道她們的年齡和體重,這很重要嗎?)。如今,咱們根據這一特性,來建立一個女友類。因爲,女生不想要讓別人知道她們的年齡和體重,也就意味着,這兩個變量是private變量,這樣,外界就不能隨意訪問了。如今,開始建立這個類:ide
class Girlfriend{ private: int age; int weight; public: Girlfriend ( int age, int weight ){ this->age = age; this->weight = weight; } int GetAge ( void ){ return this->age; } int GetWeight ( void ){ return this->weight; } };
如今,咱們已經有了「女友」這個類了。既然咱們這些寫程序的碼畜沒有對象,那麼咱們就基於這個類,來建立一個對象。函數
Girlfriend Alice;
如今,咱們已經有一個對象了,叫Alice。
好比,咱們如今其餘人想要知道Alice的年齡,體重,看一下,她贊成嗎?this
printf ( "Alice's age is %d\n", Alice.age ); printf ( "Alice's weight is %d]n", Alice.weight );
運行以後,咱們發現,
程序報錯了。固然會報錯,你覺得你是誰,想知道她體重就知道她體重,想知道她年齡就知道她年齡,別作夢了,她是不會告訴你的。
可是,難道就真的不能直接獲得她的年齡嗎?固然不是,她是我建立出來的對象,那麼我就是她男友,既然是她男友,我理應能夠直接知道她的年齡和體重。嘿嘿!
因此,如今,來寫一個,boyfriend函數。3d
void boyfriend ( const Grilfriend& girlfriend );
如今,有了這個全局函數,咱們就能夠訪問了吧。來試一下:
很不幸,居然連本身的男友都不能夠訪問女朋友的體重和年齡,這也太過度了吧。怎麼能夠這樣呢?但是,仔細一想,天底下男人這麼多,你是她男朋友,那是由於獲得了她的贊成的,若是她不一樣意,你怎麼可能可以成爲她男朋友,因此,你如今還得經過她的贊成。那麼怎麼作呢?就是用friend。在Girlfriend這個類內聲明這個boyfriend這個函數爲友元函數。code
friend void boyfriend ( const Girlfriend& girlfriend );
在類內聲明這個友元函數以後,咱們在類外實現就好了。代碼以下:對象
void boyfriend ( const Girlfriend& girlfriend ){ printf ( "my girlfriend's old is %d\n", girlfriend.age ); printf ( "my girlfriend's weight is %d\n", girlfriend.weight ); }
在主函數中,咱們建立了Alice這個對象並對她進行初始化blog
Girlfriend Alice( 20, 105 );
如今,我做爲男朋友,要訪問我女朋友Alice的年齡體重,只要,it
boyfriend( Alice );
這樣以來,就能夠了。
如今,讓咱們看一下,運行結果:
啊,看來做爲男朋友仍是有這點權利的。io
完整代碼以下:class
#include <stdio.h> #include <stdlib.h> class Girlfriend{ private: int weight; int age; public: Girlfriend ( int weight, int age ){ this->weight = weight; this->age = age; } int GetWeight ( void ){ return this->weight; } int GetAge ( void ){ return this->age; } friend void boyfriend ( Girlfriend& girlfriend ); }; void boyfriend ( Girlfriend& girlfriend ){ printf ( "my girlfriend's weight is %d\n", girlfriend.weight ); printf ( "my girlfriend's age is %d\n", girlfriend.age ); } int main ( int argc, char** argv ){ Girlfriend Alice( 105, 20 ); //printf ( "my girfriend Alice's weight is %d\n", Alice.weight ); //printf ( "my girfriend Alice's age is %d\n", Alice.age ); boyfriend( Alice ); system ( "pause" ); return 0; }
PS:這篇文章,我以爲已經寫的比較的通俗易懂了,但願看完這篇文章的小夥伴們,各位大佬們,能順手點個贊,表示支持。謝謝!
歡迎打賞!哈哈哈哈!