科銳課堂筆記 2017 4 7 函式過載與類

2021-07-30 05:54:01 字數 742 閱讀 3385

c++支援函式過載,函式過載指具有相同的函式名,但引數不同(型別、個數或順序),並且這些過載函式都在同一作用域裡。實現的原理還是使用名稱粉碎機制,c++的名稱粉碎更為複雜點,將函式作用域、每個引數型別都加在內部名字中,這些碎粉化後的名字可以通過vc tools的undname工具翻譯成可讀名,如果在函式定義前加上extern 「c」編譯器會使用c方式而不是預設的c++名字粉碎法。

匹配函式過載的過程:

1. 查詢當前可見的函式(根據函式名以及作用域);

2. 篩選候選函式(根據引數個數、型別,型別可適當隱式轉換);

3. 選擇匹配度最高的函式,如果最高優先順序匹配有多個發生二義性,編譯器報錯。

乙個類實列化後,我們稱它是該類的物件。一般地類名字首加c(class),類成員字首加m_(member),類的宣告放在標頭檔案中,成員函式的實現定義在原始檔中,如果在標頭檔案定義成員函式,此成員函式將是乙個內聯函式。類有三種訪問許可權,分別是公有(public)、私有(private)、保護(protected)。c++中的結構體與類可以看作是等價的,c++結構體也能包括資料和函式,唯一不同的是類預設訪問許可權是私有,而結構體預設公有。

在例項化乙個類物件時,只分配類資料成員占用的空間,不抱括函式(函式是所有類物件共享的),類的成員對齊、大小規則同結構體。成員函式實際上包含乙個隱式引數this即物件指標,有了這個指標才能與物件資料聯絡起來。在vc6裡使用ecx暫存器傳遞this,但如果強制成員函式為其他呼叫約定(__cdecl、__stdcall),將通過棧傳遞。



科銳課堂筆記 2017 4 19 虛函式

我們知道c 是一門物件導向的語言,它有三大特性 封裝 繼承 多型。其中多型是最具有物件導向程式設計的特性。多型分靜態多型和動態多型。靜態多型也稱編譯時多型,指通過函式過載 運算子過載等,根據引數列表在編譯時刻確定呼叫函式。動態多型也叫執行時多型,是在執行時刻才確定呼叫的函式,執行時多型是通過類中的虛...

科銳課堂筆記 2017 2 28 迴圈相關

大數階乘演算法優化,例求10的階乘1 2 3 4 5 6 7 8 9 10可轉換成 1 3 5 7 9 2 4 6 8 10 1 3 5 7 9 1 2 3 4 5 2,即把乙個大數階乘轉換成若干小數階乘,乘多少次2可用左移指令完成,其中2 5可去掉,記住有多少次2 5結果末位就加上多少個0,這樣一...

科銳課堂筆記 2017 3 17 結構體

結構體是不同資料 包括型別或邏輯意義 的集合。在設計定義乙個結構體時,要把其合理的資料組織在一塊。點 運算子用來訪問結構體成員,點運算子優先順序僅次於括號。vc6中預設的編譯選項,結構體成員對齊為8位元組 zp8 結構體成員的偏移位址規則是,必須是結構體成員對齊位元組數 zp?和該成員型別長度 字串...