用於類後或者函式後,宣告該類/函式,不可被繼承/覆蓋。例如:1. class base final //不能作為基類,即禁止繼承2. void print const final; //函式宣告,禁止函式被覆蓋(多用於類繼承)
用於宣告某函式是覆蓋覆蓋基類虛函式例如:class base 這又該怎麼解讀呢?自己去探索吧!特點:被修飾常量不可改值(唯讀);有型別檢查;通常儲存在符號表中,不分配記憶體;效率高;
與#define的區別:巨集只是機械替換,不做型別檢查;使用多少次(賦值),就查詢多少次記憶體,效率低;const可以修飾指標,巨集不可以;const可以控制在函式內部值不可變。
置於變數或者函式前,表示定義在別的檔案中。提示,遇到次變數或函式時,在別處尋找定義。或者:多檔案共享變數。extern "c"---呼叫c**(需要按照c規則編譯);
用於過載運算子時type operator 運算子(形參...)
sizeof(物件)sizeof(變數或者表示式)
struct大小計算 (位元組對齊)
結構體順序儲存,為了加快cpu的取數速度,編譯器會對結構體進行處理。讓基本資料型別的資料處於能被其大小整除的位址上。比如int型,第乙個存在 4-8位址 ,中間有乙個char 在8-9位址,那麼下乙個int 在12-16,中間的10-11就需要位元組填充。這樣一來,結構體的sizeof就會增大。
位元組對齊準則
1. 結構體變數的首位址能夠被其最寬基本型別成員的大小所整除。
2. 結構體的每個成員相對於結構體首位址的偏移量(offset)都是成員大小的整數倍,如有需要,編譯器會在成員之間加上填充位元組(internal adding)。
3. 結構體的總大小為結構體最寬基本型別成員大小的整數倍,如有需要,編譯器會在最末乙個成員後加上填充位元組(trailing padding)。
空結構體大小1位元組,用於佔位。
簡單例子
11+填充3+4+8+2=18? 8的倍數=24我們來看乙個巢狀的例子struct
2
12+填充2+1+填充3+4+4=16struct
stu2
ss; //巢狀時,要注意內嵌的struct首位址仍然要整除內部最大型別大小
9int
k;
10 }
1 #include 2c++ code3struct
stu4
ss; //
巢狀時,要注意內嵌的struct首位址仍然要整除內部最大型別大小
11int
k;
12}s1;
1314
struct
15s2;
2122
2324
intmain()
25
union的sizeof
聯合體重疊式儲存,成員共享一段記憶體。
陣列的sizeof
1.字串,多乙個'/0'
2.當陣列為形參時,大小相當於指標sizeof,大小即位址=計算機內部位址匯流排的寬度(32位4b, 64位8b)
3.函式,返回值的大小
靜態資料成員屬於類,而非物件,乙個類只有乙份;靜態成員函式屬於類,而非物件,不能使用this指標來訪問,只能訪問靜態資料和靜態成員函式;
靜態資料成員,必須在類外進行初始化,初始化使用作用域運算子標明所屬類;
如: int demo::staticvname = 1;
有時候,我們為了比避免父類的靜態變數影響子類,可以在子類中定義乙個與父類相同的static變數。這不會引起錯誤,因為有name mangling存在。(會對過載的變數和函式進行處理,以達到區分的目的)
另外,static關鍵字還有以下作用
隱藏(只在本檔案、函式中可見)
保持變數的持久化(函式中的static變數可以持久化,且可以控制可見範圍)
預設初始化為0
new:c++運算子;new-delete;使用簡單,不計算大小,不需要型別轉換;自動呼叫構造、析構函式;記憶體申請失敗,丟擲異常;不能進行重新分配;進行型別檢查;可設定記憶體分配器;用union型別測試大端小端儲存malloc:c語言標準庫函式;malloc-free; 需要計算大小,需要顯示型別轉換;不呼叫;申請失敗,返回null; 可利用relloc重新分配記憶體;不檢查型別;不可設定記憶體分配器。
new關鍵字 this關鍵字 base關鍵字
使用new,所做的三件事 1.類是引用物件,引用物件是在堆中開闢空間 在堆中開闢空間 2.在開闢的堆空間中建立物件 3.呼叫物件的構建函式 4.隱藏父類成員 子類的成員可以與隱藏從父類繼承的成員,類似於重寫。public new void sayhello this關鍵字的使用 1.代表當前類的物件...
關鍵字加鏈結 重點詞加粗
using system using system.collections using system.configuration using system.data using system.linq using system.web using system.web.security using ...
this關鍵字 static關鍵字
1.當成員變數和區域性變數重名,可以用關鍵字this來區分 this 代表物件,代表那個物件呢?當前物件 this就是所在函式所屬物件的引用 簡單說 那個物件呼叫了this所在的函式,this就代表哪個物件 this也可以用於在建構函式中呼叫其他建構函式 注意 只能定義在建構函式的第一行,因為初始化...