类模板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
原创粉丝点击