型別成員、
就是類的成員是乙個型別
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函式
字
類的其他特性
include include using namespace std class screen contents初始化的意思是,有ht乘wd個字元c初始化乙個string型別 char get const 讀取游標處的字元 inline char get pos ht,pos wd const 顯...
C 特性類 筆記
conditional obsolete 附加表示目標結構的狀態 新增乙個類,以attribute結尾 這個類繼承 system.attribute 宣告為私有類 sealed 定義需要描述的字段和屬性 attributeusage 裡面的值為該特性可以應用到那些結構上 attributetarge...
C 異常6 其他異常特性
雖然throw catch機制類似於函式引數和函式返回機制,但是還是有些不同之處。其中之一是函式fun 中的返回語句將控制權返回到呼叫fun 的函式a中,但throw語句將控制權向上返回到第乙個這樣的函式 包含能夠捕獲相應異常的try catch組合。另乙個不同之處是,引發異常時,編譯器總是建立乙個...