原创 C++ -- 深淺拷貝

1 淺拷貝 1.例如對於下面的String類,它包含一個成員變量,一個char*的指針: class String { private: char* _str; }; 2.對於String類的拷貝構造函數及operat

原创 C++ -- 四種類型轉換

1 C++四種類型轉換的引入 1.在C語言中也有類型轉換 ①例1:相近類型之間可進行隱式類型轉換 int a = 10; double b = a; //將int轉換爲double,然後賦值給b ②例2:不相近類型可以進行強

原创 C++ -- 異常

傳統的錯誤處理方式 1.錯誤碼; 2.終止程序; 3.調用預先設置的回掉函數。 傳統錯誤處理方式的缺點 1.如果返回錯誤碼,用戶必須要通過查看錯誤碼對應的文字描述才能清楚錯誤,並且這種錯誤碼錶示的意義必須明確且唯一。 2.在

原创 C++ --類的默認成員函數是否可以被定義爲虛函數

1.靜態成員函數不能定義爲虛函數 1.因爲靜態成員函數沒有this指針,並且靜態成員函數可以通過類名來訪問。 2.又因爲虛函數是放在對象的虛表裏面的,同一個類中的所有對象雖然共用同一張虛表,但是類名無法找到虛表。 2.內聯函數不

原创 Linux--進程間通信之管道

1 進程間通信的引入 1.由於進程與進程之間具有獨立性,有時候我們想讓不同的進程進行數據傳輸,進程的獨立性就會使得數據傳輸變得很困難; 2.因此只要有一種機制,能夠讓不同的進程看到同一份資源,就可以通過該資源進行信息交互,因此就

原创 C++ -- 類和對象之const成員函數,inline函數,友元,static成員

1 const成員函數 1.1 基礎知識 1.定義 const成員函數是在類的成員函數的後面加上const關鍵字,const修飾的是this指針所指向的對象,也就是保證調用這個const成員函數的對象在函數內不會被改變。 2.

原创 C++ -- 虛函數與多態

1 虛函數相關知識 1.1 虛函數概念 1.定義:在一個類的成員函數前面加上virtual關鍵字,則該函數就稱爲虛函數。 2.如果一個函數不是類的成員函數,則該函數不能定義爲虛函數。(即就是類外面不能使用virtual關鍵字)

原创 C++ -- 模板的基礎知識

模板的由來 1.對於交換函數Swap來說, (1)如果用於交換兩個整型,則代碼如下: void Swap(int* a, int* b) { int temp = *a; *a = *b; *

原创 C++ -- 模板的特化與類型萃取

模板的特化 1.定義:模板的特化就是特殊化 2.例如:對於一個模板類來說,可能對於某個特定的類型會有特殊的處理方式,就可以對該類型進行特化。 3.特化分類 ①全特化 ②偏特化 全特化 1.全特化就是將所有的模板參數都指定爲

原创 C++ -- N種構造 / 拷貝構造的優化

1 以日期類爲例 日期類的代碼如下(只包含4個默認成員函數,爲了便於觀察結果所以在4個成員函數裏面輸出一些語句): class Date { public: Date() { cout

原创 Linux--進程程序替換

替換原理 1.當fork創建子進程後,父進程與子進程執行相同的代碼,往往子進程要調用exec函數去執行新的程序。(讓一個進程去執行一個全新的程序) 2.當進程調用exec,則當前進程的代碼和數據全部被替換,堆和棧也要重新分配。

原创 Linux--實現一個簡易的Shell(可以獲取命令提示符,支持管道)

Shell的實現過程 1.從標準輸入獲取命令行; 2.對用戶輸入的命令行進行解析,解析出要執行的指令和參數; 3.創建一個子進程; 4.子進程進行程序替換,父進程等待; 5.當子進程執行完畢,父進程從wait中返回,繼續下

原创 C++--定義一個不能被繼承的類/只能在棧上或堆上生成對象的類

1 定義一個不能被繼承的類 1.1 思路: (1)不能被繼承也就意味着如果一個子類繼承自父類,則子類無法生成對象。 (2)將父類的構造函數定義爲私有的(因爲子類的構造函數是合成版本所以會調用父類的構造函數,而父類的構造函數是私有

原创 C++ -- 動態內存管理

1 C語言的動態內存管理 C語言使用malloc/calloc/realloc進行空間開闢,使用free進行空間的釋放。 1.1 malloc (1)函數形式:void* malloc (size_t size) (2)參數:開

原创 C++ -- 智能指針(自己模擬實現簡單的智能指針)

上一篇文章介紹了智能指針的基本概念及boost庫裏基本的智能指針,這裏主要模擬實現庫裏面的智能指針(簡單實現)。https://blog.csdn.net/xu1105775448/article/details/80625936