编程语言
首页 > 编程语言> > C++面向对象入门(四十一)类模板中使用默认参数

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];
}

 

标签:参数表,aType,C++,面向对象,四十一,参数,默认,默认值,模板
来源: https://www.cnblogs.com/RGBTH/p/13605557.html