純虛函數只能有.hh文件,不能有.cc文件。c++
類中函數能夠有默認參數,可是默認參數只能出如今.hh中,不能出如今.cc中。ide
類中的通常數據成員是對每一個對象都有本身的拷貝的,並且每一個通常成員函數必定要有一個調用它的對象。函數
static數據成員不在類的聲明中定義或初始化。而在對應的.cc文件中初始化(因爲交叉編譯/連接的緣由)。只在聲明中帶有static關鍵字,可是在對應的.cc文件中,是不帶static關鍵字的。也能夠用默認初始化,可是仍是要出如今.cc文件中,不然會出現連接錯誤。其餘外部代碼可用::訪問靜態成員變量。spa
static成員函數能夠定義在類型的聲明中或在定義中(.hh中或.cc中)。外部代碼也能夠用::來訪問靜態成員函數。code
可是在本類中,靜態數據成員和成員函數不須要用::訪問,直接訪問就能夠了。對象
c++支持類模板和函數模板。blog
定義類模板和定義對象以下:繼承
template<typename T> class Point { T x_coord, y_coord; public: Point() : x_coord(0), y_coord(0) { } Point(T x, T y) : x_coord(x), y_coord(y) { } ... }; Point<float> p1(3.31, 2.67); Point<int> p2(15, -6);
定義函數模板和調用函數以下:get
template <typename T> T square(T val) { return val * val; } int i = 15; cout << i << " squared = " << square(i) << endl; Matrix m(3, 3); // Matrix provides operator* Matrix m2 = square(m);
函數模板不須要指定模板參數,編譯器能夠本身從上下文推斷出來類型。編譯器
函數模板聲明以下:
template <typename T> T square(T val);
若是須要也能夠指定模板參數:
double result = square<double>(3);
3是整形,因此square(3)會被初始化爲square<int>()
因此顯示指定模板函數參數是很必要的,尤爲是把一個函數模板初始化冰川遞給另外一個函數或函數模板的時候。
structs或者classes提供了()的重載,而後就能夠對其使用適配器了。
STL容器是各類拷貝進拷貝出的。STL使用拷貝構造函數和賦值操做符。
Widget(const Widget&); Widget & operator=(const Widget &);
當容器和類繼承有關時當心子類對象被分片(父類的容器存放子類對象,致使子類對象的子類部分數據成員被舍掉而不能存放)。