1. 程式人生 > >C+_類的其他特性(筆記版本)

C+_類的其他特性(筆記版本)

型別成員、

就是類的成員是一個型別

OK舉個例子

class peron{

public :

    typedef std::string zm;

private:

    zm name = "love_ke";

    zm address = "anywhere";

}

我們的person類在public部分定義了zm,這樣使用者就可以使用這個名字。因為封裝嘛,無形裝逼最為致命,不讓使用者知道,我們用了一個string來放它的資料。(當然我們之前學過的using也可以做到)

注意:型別先定義後使用

可變資料成員

一個可變資料成員永遠不可能是const,即使它是const物件的成員

通過關鍵字 mutable來定義。

型別資料成員的初始值

我們定義了建構函式,在進行列表初始化的時候,其會自動匹配建構函式去初始化我們的型別資料成員。

當然也可以進行賦值初始化。(僅僅是初始化的它的資料成員)

關於如何定義並使用類型別及友元

關於類型別

每個類定義了唯一的型別

對於兩個類來說,即使他們的成員完全一致,這兩個類也是不同的型別。

對於一個類來說,要建立它的物件 必須先定義它才行

所以一個class的友元class 想要使用 該class的資料成員 必須先定義該class,再定義友元class。

(c++ primer我覺得解釋的巨拗口,)

舉個例

class a

{

friend:class b;

public:

   int x;

}

class b 

{

public:

    int y = x;

}

但是class a和class b的位置對調就會出現問題

類之間的友元關係,我這樣解釋

假設有兩個小朋友 小k,小d。(小k有糖,小d有玩具)

小k說:從此以後,小d就是我的好朋友了。

這句話的意味著小k拿小d當好朋友,所以小k允許小d吃他的糖 (並不意味著小k能玩小d玩具)

僅有小d也說:小d你也是我好朋友了。才意味著小k能玩小d的玩具。

(所以你看我們程式設計師都心智多淳樸,拿別人當朋友是開放朋友對自己的訪問許可權,而不是要別人的訪問許可權)

扯回來,總結一句話,一個class定義友元,就是允許友元對該class的成員進行訪問

關於類內的作用域

只提一句 :編譯器處理完類中的全部聲明後才會處理成員函式的定義。

關於名字定義

類內層定義的名字,儘量和外層不要相同。(類內層定義的名字會隱藏外層相同的名字)

成員函式的形參名字,儘量不要和類內層相同。(如果相同的話,形參會隱藏類內物件名字,可以用this指標強制訪問)

建構函式初始化順序,儘量與資料成員 宣告順序一致

explicit關鍵字宣告建構函式時,它將只能以直接初始化的形式使用,而且,編譯器將不會在自動轉換過程中使用該建構函式

所有的隱式轉換隻進行一步

聚合類:

所有成員都是public

沒有定義任何建構函式

沒有類內初始值

沒有基類,也沒與virtual函式