OOP第一次作業總結

HonorDirewolf發表於2019-04-17

OOP第一次作業總結

一.語法
1.C++:
• cin可以連續從鍵盤讀取想要的資料,以空格、tab或換行作為分隔符。
• vector型別作為class的static成員,需要在class外 define。
如:
class MyClass {
private:
static std::vector myObjectCache;//這僅僅是個宣告
public:
static void UpdateCache ();
};
需要在類外define
std::vector MyClass::myObjectCache;//定義
當然其他的資料型別同樣如此。
• (背景:由於main函式不能被其它函式呼叫,因此不可能在程式內部取得實際值。那麼,在何處把實參值賦予main函式的形參呢? 實際上,main函式的引數值是從作業系統命令列上獲得的。)
main函式的三個引數:
第一個引數 argc ,用於存放命令列引數的個數。
第二個引數 argv,是個字元指標的陣列,每個元素都是一個字元指標,指向一個字串,即命令列中的每一個引數。
第三個引數 envp ,也是一個字元指標的陣列,這個陣列的每一個元素是指向一個環境變數的字元指標。
argc表示的是argv這個陣列不為空的元素個數(檔名也是一個引數)((連續)空格會被捨棄)
最後一個引數envp,存放環境變數的陣列。envp陣列的最後一個元素也是NULL指標。
• 要在函式引數中傳遞整個陣列,可以類似int(&array)[n]這樣作為一個引數,就可以直接用陣列名調出陣列各個值了。

二.類的函式:
1. 運算子過載函式:注意友元函式不是類的成員函式(有的運算子必須要有物件的指標,如[ ]就不能過載為友元函式,而必須作為類的成員函式)。
2. 區分靜態成員函式和非靜態成員函式:靜態成員函式不屬於某個物件,而是屬於整個類,因此呼叫是也是在前面加上類名的限定符,而非靜態成員函式對於類的每個物件是不一樣的,呼叫時也應該在前面加上物件的限定符。
3. 注意引數是const的函式,要對該物件進行的操作也一定要是const。
4. 分為多個cpp檔案完成工程時,類內成員函式不允許在其他檔案宣告,而如友元函式等類外函式在其他檔案中如果用到,一定要用extern宣告。
5. 要防止多次#include標頭檔案帶來的重定義重宣告,使用ifndf非常合適。
6. 該函式的引數是哪個物件,該函式就應該在該物件對應的類所在檔案的cpp檔案中定義(雖然在部分比較智慧的編譯器中該問題不會報錯!)(第一次作業D)

三.多檔案編譯:
1、多檔案程式設計,一個檔案可以有多個函式,但是一個函式最多一個檔案
2、多檔案程式設計的步驟:
• 把所有函式分散在多個檔案中,通常主函式在單獨的檔案裡
• 為每個原始檔編寫一個配對的以.h作為副檔名的標頭檔案,主函式所在的不需要,不分配記憶體的內容都可以寫在標頭檔案裡,標頭檔案裡至少要包含配對原始檔裡所有函式的宣告
• 在所有原始檔裡使用#include預處理指令包含所需要的標頭檔案,配對標頭檔案是一種需要的標頭檔案,如果原始檔裡宣告瞭標頭檔案裡宣告的函式,也是需要的標頭檔案
3、在GCC命令後列出所有原始檔的路徑就可以編譯多檔案程式
4、可以把多檔案程式的編譯過程記錄在Makefile檔案裡,然後使用make工具完成編譯
5、從一個原始檔裡使用另一個原始檔的全域性變數時,需要使用extern關鍵字再次宣告這個全域性變數先在函式裡新增變數,再在標頭檔案用extern宣告
6、使用extern關鍵字宣告變數時,通常放在標頭檔案裡
7、不可以跨檔案使用靜態全域性變數(思考第一次作業D,明確用法)

四.小注意點:
1.特別注意bool判斷時不能把大小號寫錯!容易浪費大量時間。
2.看見錯誤後先判斷一下是哪部分的輸出錯了,再修改相應部分的程式碼。

相關文章