您好,登錄后才能下訂單哦!
為了把C++的友元講的通俗易懂,我就從這個地球上一種很神奇的生物——女人,說起。眾所周知,女生不愿意讓別人知道的兩個秘密,一個是年齡,另一個就是體重了(雖然已經知道很多年了,但是依然不懂,為什么女生不愿意讓別人知道她們的年齡和體重,這很重要嗎?)。現在,我們根據這一特性,來創建一個女朋友類。由于,女生不想要讓別人知道她們的年齡和體重,也就意味著,這兩個變量是private變量,這樣,外界就不能隨意訪問了。現在,開始創建這個類:
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的年齡,體重,看一下,她同意嗎?
printf ( "Alice's age is %d\n", Alice.age );
printf ( "Alice's weight is %d]n", Alice.weight );
運行之后,我們發現,
程序報錯了。當然會報錯,你以為你是誰,想知道她體重就知道她體重,想知道她年齡就知道她年齡,別做夢了,她是不會告訴你的。
但是,難道就真的不能直接得到她的年齡嗎?當然不是,她是我創建出來的對象,那么我就是她男朋友,既然是她男朋友,我理應可以直接知道她的年齡和體重。嘿嘿!
所以,現在,來寫一個,boyfriend函數。
void boyfriend ( const Grilfriend& girlfriend );
現在,有了這個全局函數,我們就可以訪問了吧。來試一下:
很不幸,竟然連自己的男朋友都不可以訪問女友的體重和年齡,這也太過分了吧。怎么可以這樣呢?可是,仔細一想,天底下男人這么多,你是她男友,那是因為得到了她的同意的,如果她不同意,你怎么可能能夠成為她男友,所以,你現在還得通過她的同意。那么怎么做呢?就是用friend。在Girlfriend這個類內聲明這個boyfriend這個函數為友元函數。
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這個對象并對她進行初始化
Girlfriend Alice( 20, 105 );
現在,我作為男友,要訪問我女友Alice的年齡體重,只要,
boyfriend( Alice );
這樣以來,就可以了。
現在,讓我們看一下,運行結果:
啊,看來作為男友還是有這點權利的。
完整代碼如下:
#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:這篇文章,我覺得已經寫的比較的通俗易懂了,希望看完這篇文章的小伙伴們,各位大佬們,能順手點個贊,表示支持。謝謝!
歡迎打賞!哈哈哈哈!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。