原创 數組指針語法、函數指針語法整理

#pragma warning(disable : 4996) #include <iostream> using namespace std; int add(int a, int b) { printf("fun add ..

原创 函數模板(泛型編程)

函數模板,實際上是建立一個通用函數,其函數類型和形參類型不具體指定,用一個虛擬的類型來代表。這個通用函數就稱爲函數模板。 本質:類型參數化 爲什麼要用函數模板:當存在功能相同,不需要重複修改業務邏輯時, 函數模板的調用 MySwap<i

原创 類模板派生普通類&類模板派生類模板

爲什麼需要類模板: 和函數模板作用相同,有兩個和多個類其功能相同,僅僅是數據類型不同。 類模板用於實現類所需數據的類型參數化 類模板在表示如數組、表、圖等數據結構顯得特別重要,這些數據結構的表示和算法不受所包含的元素類型的影響。 普通類

原创 函數模板機制探究(反彙編)

.cpp文件是一個高級語言,這種形式容易被讀懂。爲了在系統上運行.cpp程序,每條c++語句都必須轉化爲低級的機器指令。然後將這些指令打包成可執行目標文件格式,並以二進制形式存儲在磁盤中 gcc常用編譯選項 選項 作用 -o

原创 函數指針做函數參數

//實現了任務的調用跟編寫解耦合 //在定義函數指針類型時提前對函數的參數,返回值做了約定(協議) #pragma warning(disable : 4996) #include <iostream> using namespace

原创 類模板語法總結

禁止濫用友元函數,友元函數只用來進行左移<<、右移>>操作符重載 本質:模板是兩次編譯生成的,第一次生成的函數頭和第二次生成的函數頭不一樣 情況一:類模板中所有函數的聲明和實現寫在類的內部 情況二:類模板中所有函數的聲明與實現分離,寫在同

原创 函數模板和普通函數同時出現是的調用規則

函數模板不允許類型自動轉換 普通函數可以進行自動類型轉換 總結: 1.函數模板可以向普通函數那樣被重載 2.C++編譯器優先考慮使用普通函數 3.如果函數模板能產生更好的匹配,則使用模板函數 4.可以通過空模板實參列表的語法限定編譯器選擇

原创 C\C++—— 重載、重寫、重定義

重載 1、只能出現在同一個類當中 2、子類無法重載父類函數,父類中同名的函數會被子類中同名的函數覆蓋 3、重載是在編譯期間根據函數參數和個數決定的 重寫 1、必須發生在父類和子類當中 2、子類對象中有和父類中同名的函數 3、使用virtu

原创 C\C++——友元函數實現操作符重載(operator)

友元函數和成員函數選擇 1.當無法修改左操作數的類時,使用全局函數進行重載 2.=、[]、()和->操作符只能通過成員函數進行重載 用友元函數重載<<、>>操作符 ostream& operator<<(ostream &out, Co

原创 C\C++——重載操作符(operator)

運算符重載的限制 可以重載的運算符 + - * / % ^ & | ~ ! = < > += -= *= /=

原创 C\C++—— 靜態聯編和動態聯編

聯編是指一個程序模塊、代碼之間相互關聯的過程 靜態聯編 是程序的匹配、連接在編譯階段實現,也稱爲早期匹配。重載函數使用靜態聯編 動態聯編 指程序聯編推遲到運行時進行,所以又稱爲晚期聯編(遲綁定)。switch,if語句都是動態聯編

原创 C\C++—— 虛繼承

如果一個派生類從多個基類派生,而這些基類又有一個共同的基類,則在對該基類中聲明的名字進行訪問時,可能產生二義性 class A{public: int a;}; class A1:public A{public: int a1;}; c

原创 C\C++—— 多繼承

1、一個類有多個直接基類的繼承關係稱爲多繼承 2、  多繼承聲明語法 class  派生類名 : 訪問控制  基類名1 ,  訪問控制  基類名2 ,  … , 訪問控制  基類名n {     數據成員和成員函數聲明 }; 3、類 C

原创 C\C++—— 構造函數中能調用虛函數,能實現多態嗎?

1、對象在創建的時,由編譯器對VPTR指針進行初始化 2、只有當對象的構造完全結束後VPTR的指向才最終確定 3、父類對象的VPTR指向父類虛函數表 4、子類對象的VPTR指向子類虛函數表   子類的vptr指針分步完成 1、初始化c1

原创 C\C++—— 父類指針和子類指針的步長

多態是用父類指針指向子類對象  和  父類步長++  是兩個不同的概念 1、鐵律1:指針也只一種數據類型,C++類對象的指針p++/--,仍然可用。 2、指針運算是按照指針所指的類型進行的。 p++ <==> p=p+1 //p = (u