类模板1——基本概念
来源:互联网 发布:在淘宝上开网店程序 编辑:程序博客网 时间:2024/05/01 16:37
1、概念:类模板是一个参数化类型,也就是使用一个或者多个参数创建一系列类的方式。在C++标准库中,有一种叫做容器类,这种类可以用来管理某种特定类型的元素。这样的 一个容器是通过模板来实现的,不需要确定容器中元素的具体类型,这样定义的类型更加便于管理。
2、类模板的定义:
template<模板参数列表>class <类名>
{
//类模板的实现
};
类模板与普通类最大的区别就在于参数模板,一般的类的参数类型都固定了,而类模板的参数可以在实例化的时候确定。参数列表包含两种类型的参数:类型参数和非类型参数,类型参数就是用typename或者class来修饰的不确定类型;而非类型参数是指某种具体的参数,如int类型变量a,char类型变量b。
eg:template<typename T,int a>
class Student
{
//类体;
};
上述例子定义了一个Student的类模板,该模板的参数有类型参数T和非类型参数int a。
3、实例:定义简单的Student的类模板,并用该模板实例化产生一些类。
/***********************************************************时间:2016年10月8日10:11:18功能:定义一个学生类,并定义函数模板,求两门课的平均分************************************************************/#include <iostream>using namespace std;//定义模板类template <typename T3,typename T1,typename T2>class Student{public:Student(char *pn); //构造函数T3 average(T1 c,T2 m); //求两科的平均分void print(){cout<<"The student's name = "<<name<<endl;}private:char name[10];T1 chinese; //定义两门课的成绩T2 math; };template <typename T3,typename T1,typename T2> //构造函数实现Student<T3,T1,T2>::Student(char *pn){strcpy(name,pn);}template <typename T3,typename T1,typename T2> //求平均分函数的实现T3 Student<T3,T1,T2>::average(T1 c,T2 m){chinese = c;math = m;return (math+chinese)*1.0/2;}void main(){double mean; //定义平均分Student<double,int,double> student1("king"); //定义对象并初始化Student<int,double,double> student2("juan"); //定义对象并初始化,注意初试话时类型参数定义的是不一样的student1.print(); //打印学生姓名mean = student1.average(84,86.5);cout<<"The mean of student1's two subject is: "<<mean<<endl;student2.print(); //打印学生姓名mean = student2.average(89.2,86.5);cout<<"The mean of student2's two subject is: "<<mean<<endl;}运行结果如下图所示:
从上图结果可以看出,定义了类模板,其中含有3个类型参数,这三个参数用于求取平均成绩的函数模板中。上图中定义的第一个对象成绩的返回值定义的为double型,而第二个对象成绩的返回值为int型,所以在结果中可以清楚地看到区别,这样体现了类模板的优势,只有定义一种类型的模板,就可以实现不同对象的定义。
0 0
- 类模板1——基本概念
- 标准模板库1(STL)——基本概念
- C++模板(1) - 模板基本概念
- Jinja2模板(1) --基本概念,模板引擎,渲染模板
- C51笔记(1)—基本概念
- 模板——函数模板、类模板
- 模板——类模板
- 模板——类模板
- 模板匹配的基本概念
- 模板匹配的基本概念
- 基本概念——类和对象
- 类和对象——基本概念
- Symbian学习笔记(1)——基本概念
- zigbee学习笔记1——基本概念
- APUE(1)——UNIX基本概念
- HeadFirstJava——1_基本概念
- 图形学学习笔记1——基本概念
- C语言复习1——基本概念
- Design Thinking | 创新设计流程的7个模式
- 【JavaWeb-18】ActionContext存取数据、ValueStack存取值、EL新查找顺序、iterator、OGNL投影、其他标签、UI主题、防重复提交
- Mobius函数计算 定义+代码模板
- 2016年9月英语学习总结
- 常规new和布局new
- 类模板1——基本概念
- Spring中@ModelAttribute注解用法小结
- HDU 1272 小希的迷宫 并查集判断回路和连通
- XPATH 注入的介绍与代码防御
- Win32 程序基础知识
- JSP页面输入汉字为乱码的解决办法
- H3C中批量端口添加到Vlan
- JQuery的Dom操作
- C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法