1、friend友元
採用類的機制後實現了資料的隱藏與封裝,類的資料成員一般定義為私有成員,成員函式一般定義為公有的,依此提供類與外界間的通訊介面。但是,有時需要定義一些函式,這些函式不是類的一部分(注意友元函式不是類的一部分),但又需要頻繁地訪問類的資料成員,這時可以將這些函式定義為該函式的友元函式。除了友元函式外,還有友元類,兩者統稱為友元。友元的作用是提高了程式的執行效率(即減少了型別檢查和安全性檢查等都需要時間開銷),但它破壞了類的封裝性和隱藏性,使得非成員函式可以訪問類的私有成員。
1#include
2#include
3class point//宣告4
//預設建構函式
7void getxy();//
公有成員函式
8 friend double distance(point &a, point &b);//
友元函式
9private:10
double
x, y;
11};
1213
void
point::getxy()
1417
18double distance(point &a, point &b) //
注意函式名前未加類宣告符
1924
25void
main()
26
1.1、友元函式
friend 型別 函式名(形式引數);
1.友元函式的宣告可以放在類的私有部分,也可以放在公有部分,它們是沒有區別的,都說明是該類的乙個友元函式。
2.乙個函式可以是多個類的友元函式,只需要在各個類中分別宣告。友元函式的呼叫與一般函式的呼叫方式和原理一致。
1.2、友元類
友元類的所有成員函式都是另乙個類的友元函式,都可以訪問另乙個類中的隱藏資訊(包括私有成員和保護成員)。當希望乙個
類可以訪問另乙個類的私有成員時,可以將該類宣告為另一類的友元類。
使用友元類時注意:
(1) 友元關係不能被繼承。
(2) 友元關係是單向的,不具有交換性。若類b是類a的友元,類a不一定是類b的友元,要看在類中是否有相應的宣告。
(3) 友元關係不具有傳遞性。若類b是類a的友元,類c是b的友元,類c不一定是類a的友元,同樣要看類中是否有相應的申明
(4) 友元函式並不是類的成員函式,因此在類外定義的時候不能加上class::function name
2、extern宣告變數、用於宣告變數或函式,與定義的區別在於宣告變數不分配記憶體,定義變數會分配記憶體。
volatile關鍵詞學習筆記
volatile 翻譯過來是不穩定的。volatile具有可見性,有序性,但是不具有原子性。所以在需要原子操作的時候,volatile就會讀髒資料。被volatile修飾的變數在每一次呼叫的時候都會從記憶體中去讀取到當前暫存器中,如果有執行緒修改了它,也會實時的同步到記憶體中,並通知其它使用該變數的...
IOS學習筆記之關鍵詞 dynamic
它與 synthesize的區別在於 使用 synthesize編譯器會確實的產生getter和setter方法,而 dynamic僅僅是告訴編譯器這兩個方法在執行期會有的,無需產生警告。假設有這麼個場景,b類,c類分別繼承a類,a類實現某個協議 protocol 協議中某個屬性 someprope...
搜尋不包含關鍵詞 ASO筆記 關鍵詞優化步驟
step2.按照搜尋指數預估該詞的帶量安裝數,並累計所有詞的帶量,可預估出整體搜尋帶量。接下來具體寫一下這樣做的原因和拿 節奏大師 舉個栗子 按照搜尋指數排行 搜尋指數越高,搜尋量越大,使用者池子越大,帶來的安裝也可能越多。按照篩選條件,匯出節奏大師搜尋指數 4605,排名1 10,按照搜尋指數排序...