C++模板

    xiaoxiao2021-03-25  128

    引入C++模板,就先从函数重载说起,函数重载通过C++的检查机制检查出函数参数和所属类别的不同,如:定义一个参数比较的重载函数,参数的类型可以为int、double、float、char等类型,但是需要重写这几种代码,加大了程序员的开发代码量,为了更加方便的执行不同参数函数,引入了C++的模板机制。

    模板定义:

    模板也就是实现代码重写的机制,可以实现类型参数化,分为函数模板和类模板。

    函数模板:

    即将函数类型作为参数,表示形式为:

    template<class/typement T>

    返回类型 函数名 (形参列表)

    {

    函数体;

    }

    template为声明模板的关键字。

    实例:

    #include<iostream> #include<string> using namespace std; template<class T> //函数模板将函数类型作为参数传递到函数中,调用模板函数时,会自动检测输入参数的数据类型 T MAX(T a, T b) { return a > b ? a : b; } int main() { cout << "MAX = " << MAX(4, 6) << endl; return 0; }此时MAX函数可以传入的参数是多种的,不必再根据参数的类型重写一个函数。

    函数模板中参数可以是多个,如template<class/typement T,class/typement A>

    类模板:

    类模板的作用:因为在很多场合一个类会用很多次,但只是数据类型的不同,则就要用到类模板。

    #include<iostream> #include<string> using namespace std; template<class T,int ksize,int kval> class myarray { public: myarray(); ~myarray() { delete[] m_parr; m_parr = NULL; } void display(); private: T * m_parr; }; template<class T, int ksize, int kval> //类中的构造函数和成员函数在类外定义时,必须加上template<class T,int ksize,int kval> myarray<T, ksize, kval>::myarray() { m_parr = new T[ksize]; for (int i = 0; i < ksize; ++i) { m_parr[i] = kval; } } template<class T, int ksize, int kval> void myarray<T, ksize, kval>::display() { for (int i = 0; i < ksize; ++i) { cout << m_parr[i] << endl; } } int main() { myarray<int, 5, 6>arr; //5代表参数ksize,6代表参数kval arr.display(); return 0; }

    非类型模板参数(变量作为模板参数): 如:

    template<typement T,int Ksize> void dispaly(T a) { cout << Ksize << endl; } 调用时:

    diapaly<int,5>(15);

    转载请注明原文地址: https://ju.6miu.com/read-5251.html

    最新回复(0)