【C++標準程序庫】第二章

template< class T, class container = vector<t> >

class MyClass;
MyClass<int> x1; // 相當於MyClass< int, vector<int> >

template<class T>
class MyClass 
{
	typename T::SubType * ptr;
	...
};

如果沒有typename, SubType會被當成是一個static成員,於是T::SubType * ptr是兩數乘積

SubType成員一個型別的條件:任何一個用來取代T的型別,其內都必須提供一個內部型別SubType的定義。

【例子】

MyClass<Q> x;
Class Q{
	typedef int SubType;	// 必須帶有SubType型別
};
或者

class Q{
	class SubType;
	...
};
【成員模板】

class MyClass{
	...
	template<class T>
	void f(T);
};
適用於任何型別參數

template<class T>
class MyClass{
private:
	T value;
public:
	void assign(const MyClass<T>& x){
		value = x.value;	// 這裏是因爲*this和MyClass<T>也就是參數的類型一模一樣,所以可以直接訪問private數據
	}
	...
};
注意:assign裏面的型別必須和聲明對象中的型別一模一樣!

int i1;
int i2 = int(); // 初始化爲0,顯式初始化
用在模板上:

template <class T>
void f()
{
	T x = T();
	...
}
【異常處理】

【命名空間】

與class不同的是namespaces是開放

【雜項】
explicit禁止用於自動型別轉換。也就是禁止隱式轉換。

【C++型別轉換操作符】

static_cast、dynamic_cast、const_cast、renterpret_cast

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章