原创 12、不一樣的C++系列--初始化列表

類成員的初始化 首先來看一段代碼: #include <stdio.h> class Test { private: const int ci; public: Test() { ci

原创 21、不一樣的C++系列--數組操作符的重載

字符串類的兼容性 存在的一些歷史遺留問題 C語言不支持真正意義上的字符串 C語言用字符數組和一組函數實現字符串操作 C語言不支持自定義類型,因爲無法獲取字符串類型 C++語言直接支持C語言的所有概念 C++語言中沒有原生的字符

原创 9、不一樣的C++系列--類與封裝

類的封裝 類通常分爲以下兩個部分 類的實現細節 類的使用方式 當使用類時,不需要關心其實現細節 當創建類時,才需要考慮其內部實現細節 封裝的基本概念 並不是類的每個屬性都是對外公開的 而一些類的屬性是對外公開的 必須在類的表示

原创 26、不一樣的C++系列--繼承的基礎知識

繼承 繼承的概念 類之間的兩大關係:組合和繼承: 組合關係的特點: 將其它類的對象作爲自己的成員使用 當前類的對象與成員對象的聲明期相同 成員對象在用法上與普通對象完全一致 組合關係的代碼示例: class Memory {

原创 18、不一樣的C++系列--二階構造模式

構造函數回顧 關於構造函數的回顧 類的構造函數用於對象的初始化 構造函數與類同名並且沒有返回值 構造函數在對象定義時自動被調用 但是有沒有發現,還是存在一些問題? 1、如何判斷構造函數的執行結果呢? 2、在構造函數中執行

原创 24、不一樣的C++系列--i++和++i

前置操作符和後置操作符 首先呢,我們來思考一個問題: //下面的代碼有沒有區別?爲什麼? i++; // i的值作爲返回值,i 自增 1 ++i; // i自增 1, i 的值作爲返回值 如果從

原创 23、不一樣的C++系列--智能指針

智能指針 內存泄露(臭名昭著的BUG) 動態申請堆空間,用完後不歸還 C++語言中沒有垃圾回收的機制 指針無法控制所指堆空間的生命週期 就像這樣: int main() { for(int i=0; i<5; i++

原创 22、不一樣的C++系列--函數調用操作符的重載

函數調用操作符的重載 函數調用操作符(()) 只能通過類的成員函數重載 可以定義不同參數的多個重載函數 用法: Type operator () () { return Type; } 函數調用操作符的意義

原创 10、不一樣的C++系列--類的真正形態

類的關鍵字 struct 在C語言中已經有了自己的含義,必須繼續兼容 在C++中提供了新的關鍵字class用於類定義 class和struct的用法是完全相同的 那 struct 和 class 有什麼區別呢? 在用struc

原创 11、不一樣的C++系列--對象的構造

對象的初始化 先上一段代碼: #include <stdio.h> class Test { private: int i; int j; public: int getI() { return i;

原创 20、不一樣的C++系列--操作符重載

操作符重載 C++中的重載能夠擴展操作符的功能 操作符的重載以函數的方式進行 本質: 用特殊形式的函數擴展操作符的功能 使用: 通過 operator 關鍵字可以定義特殊的函數 operator 的本質是通過函數重載操作符

原创 27、不一樣的C++系列--繼承的構造與析構

繼承的構造與析構 子類對象的構造 子類中可以定義構造函數 子類構造函數 必須對繼承而來的成員進行初始化 直接通過 初始化列表 或者 賦值的方式 進行初始 調用父類構造函數 進行初始化 父類構造函數在子類中的調用方式 默認調

原创 13、不一樣的C++系列--對象構造順序

單個對象的構造與析構 單個對象創建時構造函數的調用順序 1、調用父類的構造過程 2、調用成員變量的構造函數(調用順序與聲明順序相同) 3、調用類自身的構造函數 析構函數與對應構造函數的調用順序相反 多個對象析構時 析構順序

原创 15、不一樣的C++系列--臨時變量

臨時變量 首先看一段代碼: #include <stdio.h> class Test { int mi; public: Test(int i) { mi = i; } Tes

原创 16、不一樣的C++系列--const對象與類成員的知識點

const對象 const關鍵字能夠修飾對象 const修飾的對象爲只讀對象 只讀對象的成員變量不允許被改變 只讀對象是編譯階段的概念,運行時無效 C++中的const成員函數 const對象只能調用const的成員函數 co