Tip 1: #include包含頭文件的問題ios
新的編譯器格式:程序員
#include <iostream> using namespace std;
舊的編譯器格式:編程
#include <iostream.h>
注:舊的編譯器格式中,包含頭文件後,不添加 「using namespace std」數組
Tip 2:Windows環境中 ,程序運行時界面自動關閉、一閃而過的問題函數
解決方法:在main() 的return 語句前添加 cin.get() 語句;this
有時需添加兩行這樣的代碼。spa
注:cin.get() ,能夠讀取空格、製表符和換行符。設計
Tip 3:C++程序 中也可使用 C 語言中的輸入輸出函數,只需包含頭文件」stdio.h」指針
Tip 4:訪問命名空間std的方法:code
M1:將 using std namespace; 放在函數定義以前,讓文件中全部的函數都可以使用名稱空間 std 中全部的元素
M2:將 using std namespace; 放在函數定義中,這樣該函數能使用命名空間中全部的元素
M3:在特定的函數中使用 using std::cout; 這樣的命令而不是 using std namespace; 讓該函數可以使用指定的元素,如cout
M4:徹底不使用變異命令 using , 在須要使用名稱空間 std 中的元素時,使用前綴 std:: ,以下所示
std::cout << 「In This Way」 << std::endl ;
Tip 5:C++中的語句類型:
l 聲明語句——定義函數中使用的變量的名稱和類型
l 賦值語句——使用複製操做符 (=) 給變量賦值
l 消息語句——將消息發送給對象,激發某種行動
l 函數調用——執行函數.被調用的函數執行完畢後,程序返回到函數調用語句後面的語句
l 函數原型——聲明函數的返回類型、函數接受的參數數量和類型
l 返回語句——將一個值從被調用的函數那裏返回到調用函數中
Tip 6:拼接字符串常量
C++容許拼接 「字符串常量」,任何兩個由空白(空格、製表符、換行符)分隔的字符串常量都將自動拼接成一個。
下列語句等效
cout << 「Hello World」 << endl; cout << 「Hello」 「 World」 << endl; cout << 「Hello」 「 World」 << endl; cout << 「Hello」 「 World」 << endl;
Tip 7:sizeof() 與strlen() 判斷字符數組長度的區別
l sizeof() 返回值是 整個數組的長度;而strlen() 返回的是字符數組中字符串的長度(strlen() 只計算可見字符,不把空字符 ‘\0’ 計算在內),而不是數組的長度。
如:存放 」cosmic」 時,字符數組長度應不小於 strlen( cosmic ) + 1 。
Tip 8:空指針,當計算機沒有足夠內存而沒法知足new 的請求時,new將返回。
C++中值爲的指針被稱爲空指針(null pointer),C++確保空指針不會指向有效的數據。
所以,空指針常被用來表示操做符或函數失效。
Tip 9:數組名 和 指針的差異:
數組名是常量,存放的是數組首個元素的地址,不能修改數組名的值;
指針是變量,能夠改變它的值。
Tip 10:枚舉 的取值範圍
上限:找到枚舉量的最大值,而後找到大於這個最大值的、最小的2的冪,將它減去1,
獲得的即是上限
下線:找到枚舉量的最小值,若是它小於,則下限爲;若它小於,先忽略符號,按照上面的方法,獲得上限,再加上負號,就獲得下限。
Tip 11:cin 輸入輸出的問題
發送給cin的輸入被緩衝,也就是說,只有當用戶按下回車鍵後,纔會將以輸入的內容發送給程序;並且,cin 會忽略輸入的空格和換行符。
以下列程序中:
輸入:Hello world this is my # test program
輸出:Helloworldthisismy
若要獲取輸入的空格或換行符,應使用cin.get (char) ;
注:使用cin 讀取字符時,會忽略空格;
若要檢查每一個字符(包括空格、製表符、換行符),應使用cin.get( ch )。
Tip 12:#define 和 typedef 的區別
下列語句中, pa是一個指針,pb是一個整型變量
#define INT_POINTER int * INT_POINTER pa, pb;
Tip 13:關於const 指針的問題
若是關鍵字const 出如今 * 的左邊, 表示被指物是常量;
若是關鍵字const 出如今 * 的右邊, 表示指針自身是常量
若是出如今 * 的兩邊, 表示 被指物 和 指針 二者都是常量.
int const * pi; const int * pi;
兩種寫法同樣, pi指向一個常量
Tip 14:將引用參數聲明爲常量數據的引用的理由
l 使用const 能夠避免無心中修改數據的編程錯誤
l 使用const 使函數可以處理 const和 非const 實參,不然將只能接受與非const數據
l 使用const 引用使函數可以正確生成並使用臨時變量
Tip 15:什麼時候使用引用參數
l 程序員可以修改調用函數中的數據對象
l 經過傳遞引用而不是整個數據對象,能夠提升程序的運行速度。
注:當數據對象較大時 (如結構和類對象),第二個緣由最重要。這些也是使用指針參數的緣由。 這是有道理的,由於,引用參數實際是基於指針的代碼的另外一個接口。
Tip 16:什麼時候用指針?什麼時候用引用?
對於使用傳遞的值而不作修改的函數:
l 若是數據對象很小,如內置數據類型或小型結構,則按值傳遞。
l 若是數據對象是數組,則使用指針,由於這是惟一的選擇,並將指針聲明爲指向const的指針
l 若是數據對象是較大的結構時,則使用const指針或const引用,以提升程序效率,這樣能夠節省複製結構所需的時間和空間
l 若是數據對象是類對象,則使用const 引用。類設計的語義經常要求使用引用,這是C++新增這項特性的主要緣由,所以,傳遞類對象參數的標準方式是按引用傳遞。
對於修改調用函數中數據的函數:
l 若是數據對象是內置數據類型,則使用指針。若是看到諸如fixit (& x) 這樣的代碼,(其中 x 是int型),則很明顯,該函數將修改x
l 若是數據對象是數組,則只能使用指針。
l 若是數據對象是結構,則使用引用或指針
l 若是數據對象是類對象,則使用引用
Tip 17:在類對象中,賦值 != 初始化
C++規定,對象的成員變量的初始化動做發生在進入構造函數本體以前。
所以,正確的初始化方式爲:
class Apple { public : … string color; Apple(); Apple(string tmp):color(tmp) {} // 初始化 ( initializations ) // 構造函數本體沒必要有任何動做 private: … };
Tip 18: C++默默編寫並調用的函數
class Empty { public : Empty() { … } // default 構造函數 Empty(const Empty& rhs) { … } // copy 構造函數 ~Empty() { … } // 析構函數 Empty& operator=(const Empty& rhs) { … } // copy assignment 操做符. };
只有當這些函數被須要( 被調用 ),它們纔會被編譯器建立出來。
程序中須要它們是很日常的事。下面的代碼致使上述每個函數被編譯器產出:
Empty e1; // default 構造函數 // 析構函數 Empty e2 ( e1 ); // copy構造函數 e2 = e1; // copy assignment 操做符
Tip 19: 類中的 static類型函數不能接收 this 指針