【C++】类模板基础概念以及用法
2016-06-17 17:36
441 查看
一、为什么要引进类模板
减少代码重用。这个概念在C++里有很多
二、类模板与模板类
(1)类模板的含义
类模板的意思是,按不同的方式重复使用相同的代码。一个类模板(也称为类属类或类生成类)允许用户定义为类定义的一种模式,是的类中的某些数据成员、默写成员函数的参数、某些成员函数的返回值,能够取任意类型
包括系统预定义的和用户自定义的
(2)类模板和类模板的概念
类模板:是一个类型参数化的样板,是一组类模板的集合模板类:是某个类模板的一个实例
(3)类模板的定义格式
template <模板参数表> //------>模板参数表的形式 class(标识符)class (类名)
{
(类型说明)
};
//类体实现
(4)模板类的使用格式
<类模板名> <对象名>三、类模板的一个实例
说明:
下面这个代码实现的是有界的数组利用类模板可以定义不同类型的数组(如int 、double)
代码块:
#include<iostream> using namespace std; //这是一个类模板,用于描述一个有界的数组 template <class AType>//尖括号里是模板参数表 class array//定义一个array类 { public: array(int size);//构造函数 ~array()//析构函数 { delete [] a;//释放 } AType & operator[](int i);//运算符 private: int length;//私有成员 长度 AType *a;//私有成员 自定义类型的一个 指针a } ; template <class AType> array<AType>::array(int size)//size为数组的大小 { register int i; length = size; a = new AType[size]; if(!a) { cout<<"动态空间申请失败!"<<endl; exit(1); } for( i = 0;i<size ;i++) { a[i] = 0; } } template <class AType> AType & array<AType>::operator[](int i) { if(i<0 || i>length-1)//若输入 0 或者大于长度 ,那么越界 { cout<<"\n这个数 "<<i<<" 越界了,退出程序!\n"; exit(2); } return a[i]; } /***********上面可以封装到一个头文件里,以后都可以用了*******/ int main() { array<int> a1(10);//定义模板类整型对象a1 ,括号里为数组大小 array<double> a2(5);//定义模板类双精度型对象a2 int i = 0; cout<<"整形数组 :"; for(int i(0); i<10; i++)//int i(0)是int类里面的构造函数,意思和 i = 0相同 { a1[i] = i+1;//对数组元素进行赋值 } for( i = 0; i<10 ; i++) { cout<<a1[i]<<" ";//打印a1数组 } cout<<endl; cout<<"双精度数组:"; cout.precision(4);//输出小数点后3位,第4位四舍五入。 for( i = 0; i<5; i++) { a2[i] = (double)(i+1)*3.14;//打印 } for( i = 0; i<5 ; i++) { cout<<a2[i]<<" "; } cout<<endl; a1[20] = 15;//这里判断 a1[20]越界了,然后调用 AType & array<AType>::operator[](int i),退出程序 a2[20] = 25.5;//这条语句并没有执行 return 0; }
运行结果:
四、小结
类模板是对一批仅仅成员数据类型不同的类的抽象,程序员只要为这一批类所组成的整个类家族创建一个类模板,给出一套程序代码,就可以用来生成多种具体的类,(这类可以看作是类模板的实例),从而大大提高编程的效率。相关文章推荐
- C++ 虚继承的对象模型
- c++——补第一次作业1
- leetcode 303 Range Sum Query - Immutable C++
- C语言中write函数
- 策略模式C++代码示例---《大话设计模式》笔记
- C语言之memcpy函数
- C++ 智能指针
- leetcode 28 Implement strStr() C++
- C++里的seekg(),tellg(),seekp(),tellp()函数
- C/C++基础——vector的基本操作总结
- c++继承体系中,哪些函数不该被继承
- C#调用C++DLL时遇到的PInvoke 函数的调用导致堆栈不对称问题
- Super Ugly Number
- C++ 四种强制类型转换
- C++之模板
- C++Primer 第5章笔记整理
- 深拷贝和浅拷贝
- c++(补)
- c++(补)
- c++(补)