C++类模板
来源:互联网 发布:网络编辑前景分析 编辑:程序博客网 时间:2024/05/29 09:01
类模板就是一系列相关类的模型或样板,这些类的成员组成相同,成员函数的源代码形式相同,所不同的只是所针对的类型(成员的类型以及成员函数的参数和返回值的类型)不同。对于类模板,数据类型本身成为了它的参数,因而是一种参数化类型的类,是类的生成器。类模板中声明的类称为模板类。
示 例:
#include<iostream>#include<iomanip>#include<cstdlib> //使用库函数exit()using namespace std;template<typename TYPE> //类模板声明以此开头class array{int _size;TYPE * data; //区分不同类模板实例的有关类型应使用虚拟类型public:array(int n);~array(){delete []data;}TYPE &operator [](int i);int size()const{return _size;}};template<typename TYPE>array<TYPE>::array(int n){if(n<1){cout<<"Error dimension description";exit(1);}_size=n;data=new TYPE[_size];}template<typename TYPE>TYPE &array<TYPE>::operator [](int i){if(i<1||i>_size){cout<<endl<<"Subscript out of range";delete []data;exit(2);}return data[i-1];}int main(){array<int> a(5);int i;for(i=1;i<=a.size();i++) a[i]=i;for(i=1;i<=a.size();i++) cout<<setw(5)<<a[i];cout<<endl<<endl;array<double> b(5);for(i=1;i<=b.size();i++) b[i]=i+i/10.0;cout.precision(2);for(i=1;i<=b.size();i++) cout<<setw(5)<<b[i]<<' ';cout<<endl<<endl;system("pause");return 0;}程序运行结果:
从上例可以看出类模板的定义格式,其中要注意三个环节的语法格式。
(1)声明一个类模板的格式:
template <<模板形参表>> <类声明>
<模板形参表>由一个或多个模板形参组成;与一般的类声明的不同之处在于,这里的<类声明>要用<模板形参表>中声明的虚拟类型参数来修饰它的某些成员,使模板类独立于任何具体的数据类型。
(2)在模板外定义的成员函数是一个函数模板,其定义格式:
template<模板形参表>
<返回类型> <类名><<模板形参表>>::<函数名>(<函数形参表>)<函数体>
注:类模板的成员函数都是模板函数,因此在模板外定义的成员函数的格式与定义普通模板函数十分相似。
(3)用类模板定义对象的格式:
<类名><<模板形参表>> <对象名>; 或 <类名><<模板形参表>> <对象名>(<构造函数实参表>);
在定义对象的过程中,编译系统会自动地根据需要生成相应的类定义,这种依据类模板生成类定义的过程称为类模板的实例化。类模板实例化所生成的每一个类定义就是相应类模板的一个实例。
在用类模板定义对象时,可以为类模板的参数设置默认值。具体地说,在定义类模板时,可以为模板形参表声明的最后若干个参数设置默认值;而这些有默认值的参数中,最后的若干个对应实参可以在定义对象时省略。
- 【c/c++】类模板
- 【C/C++】模板类
- 【c++】模板和模板类
- C/C++:函数模板与类模板
- [C/C++]模板函数与模板类
- c++vector模板类
- c++vector模板类
- c++:类模板
- [C++]类模板
- C++:类模板
- 【c++】类模板
- C++stack模板类
- 类模板与模板类(C++)
- C++,template,类模板和函数模板
- C++:函数模板、类模板及其特化
- C++---函数模板与类模板
- Linux C/C++ 模板:类模板(主模板)
- C/C++_log2000_函数模板与类模板笔记1
- WAV文件格式
- 170422 汇编-串传送和df标志位
- Linux下安装OCRFeeder
- Unity3D-Certain Event
- 字,字节,比特
- C++类模板
- 使用浏览器——Chrome浏览器插件使用
- bitmap(位图)
- 2017-4-23:学习笔记
- 浙江省赛 D Let's Chat
- java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector
- Spark-SQL之DataFrame操作大全
- ubuntu 常见错误--Could not get lock /var/lib/dpkg/lock
- socket阻塞与非阻塞,同步与异步、I/O模型