C++面向對象入門(四十一)類模板中使用默認參數


類模板的默認參數: 包含和通用類型相關的默認參數, 當類模板被實例化時, 如果沒有指定其他類型的參數, 則使用默認參數,
函數類型參數也可以給定默認值
定義默認參數語法:
<typename T,.., int|&|* t,.., typename V = defaultType,..., int|&|* v = defaultValue> ---模板參數表
上述模板參數表的后半段 typename V = defaultType,..., int|&|* v = defaultValue
即是默認參數的定義方式
類模板使用默認參數實例化模板類語法:
類模板名<顯式指定非默認參數列表(包括函數參數)>
只需顯式指定沒有默認值的模板參數表中的參數即可, 當模板參數表所有參數都具有默認值時, 如果實例化類模板時, 都使用默認
參數, <>不能省略
注意事項:
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];
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM