C++面向对象入门(四十)类模板中使用函数类型参数

函数类型参数: 在类模板的模板参数表中必须至少有一个类参数, 还可以有非类参数的参数, 非类参数的参数被称为函数类型参数,
又称为无类型模板参数, 采用语法和普通函数参数一样, 只包含参数类型和参数名. 但是只限于整型, 指针型和引用. 传递给函数
类型参数的实参要么是整型常量, 要么是指向全局函数或对象的指针或引用组成. 函数类型参数的值不能改变, 可以看作常量, 常
用来指定数组大小
特点总结:
1 只能为整型, 指针或者引用(指向全局函数或对象)
2 不能改变值(可看作常量)
3 在模板参数表的定义语法和普通函数参数表定义一样
语法:
数据类型 参数名
 
代码示例:
#include <iostream>
using namespace std;

/*
函数类型参数: 在类模板的模板参数表中必须至少有一个类参数, 还可以有非类参数的参数, 非类参数的参数被称为函数类型参数,
又称为无类型模板参数, 采用语法和普通函数参数一样, 只包含参数类型和参数名. 但是只限于整型, 指针型和引用. 传递给函数
类型参数的实参要么是整型常量, 要么是指向全局函数或对象的指针或引用组成. 函数类型参数的值不能改变, 可以看作常量, 常
用来指定数组大小

特点总结:
1 只能为整型, 指针或者引用(指向全局函数或对象)
2 不能改变值(可看作常量)
3 在模板参数表的定义语法和普通函数参数表定义一样
语法:
数据类型 参数名
*/

//使用函数类型参数(无类型模板参数)指定数组大小
template<typename AType, int size>
class aType
{
private:
    AType arr[size];
public:
    aType(AType arr[]);
    AType &operator[](int n);
};

int main()
{
    int intArr[] = { 9,8,6,5,3,2 };
    aType<int, 6> 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];
}

 

posted @ 2020-09-03 08:04  DNoSay  阅读(475)  评论(0)    收藏  举报