类模板2——静态成员以及非类型的类模板参数
来源:互联网 发布:怎么查询域名 编辑:程序博客网 时间:2024/05/21 09:54
一、类模板的静态成员
1、概念:与普通类中的静态成员类似,模板类中的静态成员并不仅仅属于某一个对象,它可以实现对象之间的数据共享,静态成员包括:静态数据成员和静态函数成员。
2、初始化:静态数据成员只能在类模板定义的外部进行初始化,而成员函数既可以在类体内进行初始化,又可以在类体外进行初始化。
3、实例:定义一个学生类模板,计算学生某一科的平均成绩。
/***********************************************************时间:2016年10月8日11:23:53功能:定义一个学生类,定义静态成员函数,用于求某科的平均值************************************************************/#include <iostream>using namespace std;//定义模板类template <typename T>class Student{public:Student(char *pn,double c,double m); //构造函数,分别给出学生姓名,语文和数学成绩T average(double c,double m); //求两科的平均分static double chinese_add();static double math_add();static double chinese_mean(); //求语文的平均成绩static double math_mean(); //求数学的平均成绩char name[10];static double chinese; //定义两门课的成绩static double math;static double chinese_sum;static double math_sum;private:};template <typename T> //构造函数实现Student<T>::Student(char *pn,double c,double m){chinese = c;math = m;strcpy(name,pn);}template <typename T> //求平均分函数的实现T Student<T>::average(double c,double m){return (math+chinese)*1.0/2;}template <typename T> //求总的语文成绩double Student<T>::chinese_add(){chinese_sum += chinese;return chinese_sum;}template <typename T> //求总的数学成绩double Student<T>::math_add(){math_sum += math;return math_sum;}template <typename T> double Student<T>::chinese_mean() //求语文的平均成绩函数的实现{return chinese_sum/3;}template <typename T>double Student<T>::math_mean() //求数学的平均成绩函数的实现{return math_sum/3;}template<typename T> double Student<T>::chinese = 0; //初始化静态数据成员template<typename T> double Student<T>::math = 0;template<typename T> double Student<T>::chinese_sum = 0;template<typename T> double Student<T>::math_sum = 0;void main(){cout<<"name"<<"\tchinese"<<"\tmath"<<"\tmean"<<endl;Student<double> student1("king",82,85.3); //定义对象并初始化cout<<student1.name<<"\t"<<student1.chinese<<"\t"<<student1.math<<"\t"<<student1.average(82,85.3)<<endl;Student<double>::chinese_add(); //调用累加函数Student<double>::math_add();Student<double> student2("ling",81.5,87); //重新定义对象并初始化cout<<student2.name<<"\t"<<student2.chinese<<"\t"<<student2.math<<"\t"<<student2.average(81.5,87)<<endl;Student<double>::chinese_add();Student<double>::math_add();Student<double> student3("juan",98.9,96.5); //重新定义对象并初始化cout<<student3.name<<"\t"<<student3.chinese<<"\t"<<student3.math<<"\t"<<student3.average(98.9,96.5)<<endl;Student<double>::chinese_add();Student<double>::math_add();cout<<"Average"<<"\t"<<Student<double>::chinese_mean()<<"\t"<<Student<double>::math_mean()<<endl;}
二、非类型的类模板参数
1、概念;类模板的参数可以不仅仅是类型参数,普通值也可以作为类模板的参数,这种参数叫做非类型参数,非类型参数类似于函数参数,就是在类型后面跟上变量名。但是,非类型模板参数是有限制的,非类型模板参数只能是整型类型或者指针类型,这是因为指针的本质其实就是一个整型类型的值。
0 0
- 类模板2——静态成员以及非类型的类模板参数
- 非类型模板类参数
- c++特性:指向类成员的指针和非类型类模板参数
- 非类型模板参数与 非类型类模板参数的使用
- 类模板的静态成员
- [c++ template]非类型的函数模板以及非类型的类的模板
- 非类型的模板参数
- 模板非类型参数
- 非类型模板参数
- 非类型模板参数
- 非类型模板参数
- 非类型模板参数
- 非类型模板参数
- 模板类的静态成员变量
- 模板类,通用类型名与非类型参数
- 非类型模板参数的限制
- C++ 类模板中非类型参数的模板参数
- 类模板的非类型形参
- Session机制详解
- 多线程工作流程图
- JSP 隐式对象
- 常用的CSS3 -webkit-前缀
- 《从零开始学Swift》学习笔记(Day 34)——静态属性是怎么回事?
- 类模板2——静态成员以及非类型的类模板参数
- 第七周项目4—队列数组
- 顺序表应用1:多余元素删除之移位算法
- mongodb 3.x 之实用新功能窥看[1] ——使用TTLIndex做Cache处理
- 10个方法帮你搞定Web设计风格指南
- 【转】Java enum的用法详解
- 在集群上运行spark app
- 第七周项目3-负数把正数赶出队列
- 第七周项目五--排队看病模拟