1.const
const int a = 23 ;
假如const int a = 23定義在file1.c中,那麼同一個程序中的file2文件就無法通過extern來使用file1中的a了 但是
// file1 extern const int a =12 ; // file2 extern const int a ; // use a from file1
非const變量默認為extern,
2. reference: 對象的另一個名字。
。
引用必須用與該引用同類型的對象初始化
int ival = 1024 ; int &refval0 = ival ; // ok int &refval1 ; // error :must be intialzed int &refval2 = 10 ; // error :initilizer must be an object
當引用初始化後,只要該引用存在,它就保持綁定到初始化時指定的對象。不可能將引用綁定到另一個對象。
。
const 引用:指向const對象的引用。
const int ival = 1024 ; const int &refval = ival ;//ok: both reference and object are const int &refval = ival ; // error: nonconst reference to a const object
可以讀取但不能修改refval
即:const 引用是指向const 的引用
,如字面值常量:
int i = 42 ; const int &r = 42 ; const int &t = r + i ; double dval = 3.14 ; const int &r=dval ;
編譯器會把這些代碼轉化成如下形式的編碼:
int temp = dval ; const int &r = temp ;
3.
class A{ public: ... private: ... } ;
編程新手經常會忘記類定義後面的,這是一個很普遍的錯誤!
定義類數據成員與定義變量有非常重要的區別:一般不能把類成員的初始化作為其定義的一部分。。
4.
struct A{ // operation private: // data };
struct和 class關鍵字定義類的唯一差別在於默認訪問級別:默認情況下,struct的成員為public,而class的成員為private。
5. 頭文件包含在多個源文件中,所以不應該含有變量或函數的定義。但是頭文件可以,值在編譯時就已經知道和。這些實體可以在多個源文件中定義,只要每個源文件中的定義是相同的。
6.預處理器:
#include設施是c++預處理器(preprocessor)的一部分。
系統的頭文件可能用特定於編譯器的更高效的格式保存。
頭文件可以包含其他頭文件,因此,設計頭文件時,應該使其可以多次包含在同一源文件中。我們必須保證多次包含同一頭文件不會引起該頭文件定義的類和對象被多次定義。
使得頭文件安全的通用做法,是使用預處理器定義
預處理器常量的名字在程序中必須是唯一的。任何與預處理器常量相匹配的名字的使用都關聯到該預處理器常量。為避免名字沖突,預處理器常量經常用全大寫字母表示。
可以如下避免同一個頭文件被多次定義:
#ifndef CAR_H #define CAR_H // definition of class car and related function goes here #endif
頭文件應該含有保護符,即使這些頭文件不會被其他頭文件包含。編寫頭文件保護符並不困難,而且如果頭文件被包含多次,它可以避免難以理解的編譯錯誤。
我們可以用定義在頭文件中的實體(如類)來命名預處理器常量來避免預處理器常量重名的問題。
#include <iostream> 標准頭文件,編譯器會在預定義的位置集查找該頭文件,這些預定義的位置可以通過來修改。使用的查找方法因編譯器的不同而差別迥異。
#include "our_header.h" 非系統頭文件,非系統頭文件的查找通常開始於源文件所在的路徑。