「友元」的概念其實是針對於類的私有成員來說的,乙個類的由於封裝的緣故,類體中私有成員是不可以被外界訪問的,無論是繼承也好,都是無法訪問類內私有成員的。但是正是有那麼一些人,願意打破陳規破例訪問類體內的私有成員,此時「友元」的概念閃亮登場。其實我們的普通函式是可以訪問類體中的public,但是自從來了「友元」,protected和private型別的變數都被盡收眼底,無處可藏。
友元成員函式宣告和定義的順序必須滿足一定要求,否則vs2017會報錯。
#include #include using namespace std;
class person;
class student
;
class person
person(person& personobject)
person operator = (person personobject)
};
void student::showinf(person& personobject)
int main()
我們這裡用student類中的showinf()成員函式訪問person類中的私有成員name和age。
① 首先,我們先宣告可以下person類型別,這樣我們才可以在下面定義student類使用這個資料型別,但是一定要注意,此時的person類是個空類只是個宣告我任何實際成員引數,因此我們student中的showinf()要在person類定義完後在進行定義,此時我們才可以在student中的showinf()中訪問person類中的成員,這裡我們先給student中的showinf()函式乙個類內宣告;
② 定義person類的實體,在定義person類實體之前,千萬不要定義student中的showinf()函式,因為person類實體未定義之前我們也不知道person類中有什麼成員;
③ 定義student類中可以訪問呢person類私有成員的函式實體,此時定義實體才有意義,編譯器才不會報錯,因為,這個時候person類內有啥已經知道了,訪問person類中的成員也就順理成章了。
④ 特別注意:這裡我們只能通過向函式傳遞形參來訪問person類中的私有成員,因為在person實體未定義之前,編譯器是不允許我們定義person類的物件的。
#include #include using namespace std;
class person;
class student
};
class person
person(person& personobject)
person operator = (person personobject)
};
void student::showinf()
int main()
這裡,我們在未定義person實體之前(僅僅定義了乙個person類的宣告)就在student類體內定義person類的成員函式,這樣的話編譯器並不知道給person類物件分配多少記憶體空間,因此此時編譯器會報錯!
我們一定要注意:在未定義的類實體之前,一定不要貿然的在其他類體內定義該類型別的物件作為成員變數。
iostream使用時注意事項
標準io庫在3個頭檔案中定義 iostream是從流中讀寫,fstream是從檔案的讀寫,而sstream是從字串中去讀寫。io物件有乙個很重要的特點,就是不能複製或者賦值。這意味兩點 第一,io物件不能儲存在容器中,第二,形參或者函式的返回值也不能是io型別。如果需要傳遞io物件,則需要使用引用。...
Selectors使用時注意事項
1.serversocketchannel和socketchannel必須配置成非阻塞的 2.每次輪詢後,得到selectionkey後,必須從選擇集裡remove掉 iteratorkeys selector.selectedkeys iterator while keys.hasnext 3.如...
removeChild使用時注意事項
假如 一段普通的 其中gift list為乙個table的id var giftbody document.getelementbyid gift list getelementsbytagname tbody 0 var gifttrs giftbody.getelementsbytagname ...