試圖對C++友元函式,靜態成員函式做個小結
2014年12月13日 22:28:43第一篇部落格 以下僅僅是個人觀點,請大家指正.
友元函式分類:(按照我的想法,結合C++ Plus)
一. 1. 讓其他類(B類)的成員數最為類A的友元函式(只需要在類A中宣告即可)
2.讓類B成為類A的友元類---->>>以上兩種方式必須通過B的引用,指標或者物件來呼叫
二. 1. 讓一個全域性函式成為友元函式(可以定義在類內,也可以定義在類外,但與靜態成員函式不同的是,在類外定義和宣告不能加上A::作用域描述符.
因為友元不是類A的作用域內的函式,他只是在類A中宣告此函式有許可權訪問類成員而已,與一般的宣告意義是有很大區別的. 因此呼叫的時候也不能加上A::)
另外,值得注意的是,有些編譯器還需要在類外再次宣告友元函式,使得這個友元函式全域性可見(個人見解),有些則不需要.
建議,在類內宣告友元,在類外定義友元,這樣,可以避免編譯器的限制.
再次強調友元函式是全域性的,在類內的宣告只是為了說明他有許可權去訪問類內的成員.
靜態成員函式:
靜態成員函式是在類A作用域的,屬於類A的成員,但不是物件成員.
它可以通過物件呼叫(但不建議),因此它的宣告定義要加上A::作用域說明符(在類外).
靜態成員變數:
除了靜態const型別的成員變數外,靜態成員變數必須在類外初始化.
靜態的const型別的成員變數可以在類內初始化.
一般的
變數的宣告是為了表明作用域和生命週期.申請記憶體空間
變數的初始化是告訴編譯器變數最初應該賦什麼值.
變數的定義往往伴隨了宣告和初始化(沒有明顯賦值的就是預設初始化,例如int型別全域性變數被預設賦值為0)
函式的宣告表明此名字在當前作用域可見,並且可能伴隨著名字隱藏.
函式的定義就是表明函式具體做什麼. C++感覺名字查詢和作用域很重要
有一種函式需要多次定義,那就是inline函式,因此inline函式一般定義在標頭檔案中