類模板的默認參數: 包含和通用類型相關的默認參數, 當類模板被實例化時, 如果沒有指定其他類型的參數, 則使用默認參數,
函數類型參數也可以給定默認值
函數類型參數也可以給定默認值
定義默認參數語法:
<typename T,.., int|&|* t,.., typename V = defaultType,..., int|&|* v = defaultValue> ---模板參數表
上述模板參數表的后半段 typename V = defaultType,..., int|&|* v = defaultValue
即是默認參數的定義方式
<typename T,.., int|&|* t,.., typename V = defaultType,..., int|&|* v = defaultValue> ---模板參數表
上述模板參數表的后半段 typename V = defaultType,..., int|&|* v = defaultValue
即是默認參數的定義方式
類模板使用默認參數實例化模板類語法:
類模板名<顯式指定非默認參數列表(包括函數參數)>
只需顯式指定沒有默認值的模板參數表中的參數即可, 當模板參數表所有參數都具有默認值時, 如果實例化類模板時, 都使用默認
參數, <>不能省略
類模板名<顯式指定非默認參數列表(包括函數參數)>
只需顯式指定沒有默認值的模板參數表中的參數即可, 當模板參數表所有參數都具有默認值時, 如果實例化類模板時, 都使用默認
參數, <>不能省略
注意事項:
1 <>不能省略
2 一個位置使用了默認參數, 其后的所有參數必須使用默認參數(定義類模板時, 也應該在模板參數表中保證第一個使用默認參數的
參數后的所有模板參數均勻默認值)
1 <>不能省略
2 一個位置使用了默認參數, 其后的所有參數必須使用默認參數(定義類模板時, 也應該在模板參數表中保證第一個使用默認參數的
參數后的所有模板參數均勻默認值)
代碼示例:
#include <iostream> using namespace std; /* 類模板的默認參數: 包含和通用類型相關的默認參數, 當類模板被實例化時, 如果沒有指定其他類型的參數, 則使用默認參數, 函數類型參數也可以給定默認值 定義默認參數語法: <typename T,.., int|&|* t,.., typename V = defaultType,..., int|&|* v = defaultValue> ---模板參數表 上述模板參數表的后半段 typename V = defaultType,..., int|&|* v = defaultValue 即是默認參數的定義方式 類模板使用默認參數實例化模板類語法: 類模板名<顯式指定非默認參數列表(包括函數參數)> 只需顯式指定沒有默認值的模板參數表中的參數即可, 當模板參數表所有參數都具有默認值時, 如果實例化類模板時, 都使用默認 參數, <>不能省略 注意事項: 1 <>不能省略 2 一個位置使用了默認參數, 其后的所有參數必須使用默認參數(定義類模板時, 也應該在模板參數表中保證第一個使用默認參數的 參數后的所有模板參數均勻默認值) */ //使用默認參數 template<typename AType = int, int size = 10> class aType { private: AType arr[size]; public: aType(); aType(AType arr[]); AType &operator[](int n); }; int main() { int intArr[] = { 9,8,6,5,3,2 }; //使用默認參數的類模板實例化類 //<>不能省略, 但是<>里給定任何數據類型 aType<> intArray(intArr); cout << intArray[5] << endl; cout << intArray[-1] << endl; //由於給定數組實際長度和默認參數規定長度不一致, 訪問達不到預期效果 cout << intArray[8] << endl; system("pause"); } template<typename AType, int size> aType<AType, size>::aType(AType arr[]) { for (size_t i = 0; i < size; i++) { this->arr[i] = arr[i]; } } template<typename AType, int size> AType &aType<AType, size>::operator[](int n) { if (n < 0 || n >= size) { cout << "數組下標越界, 將返回第一個元素!" << endl; return arr[0]; } return arr[n]; }