我们在编程的时候总是会遇到一些类似的模块,只是模块中的形参的数据类型不同,导致我们要不断的去更改模块的。这里就涉及到重载的知识点了。例如以下的几种情况:
这时候,C++中的模版(template)就很好的为我们提供了解决方案。运用模版,我们只需要在使用时,再将数据类型定义上去就可以使用了,不用大费周折的不同的数据类型都得去写一个模块。//函数1. int max(int x,int y); {return(x>y)?x:y ;} //函数2. float max( float x,float y){ return (x>y)? x:y ;} //函数3. double max(double x,double y) {return (c>y)? x:y ;}
首先,我们得自己写一个模版的头文件。模版的格式很复杂,有点难记。但没关系,我们一步步来。下面给出头文件的代码:
1.类模版的定义#ifndef TemplateClass_H_ #define TemplateClass_H_ template <class A, class B> class myClass{ //定义一个类模版 private: A X; B Y; public: myClass(A X, B Y); //初始化模块,初始化X,Y void output(); A max(); }; template <class A,class B> myClass<A,B>::myClass(A a,B b):X(a),Y(b){} //初始化X,Y //注意下面标红的数据类型,这是为了说明函数的数据类型 template<class A, class B> void myClass<A, B>::output() { //输出X,Y cout << "X:" << X << endl << "Y:" << Y << endl; } template<class A,class B> A myClass<A, B>::max() { //得到X,Y中最大的一个值 return X > Y ? X : Y; } #endif // !TemplateClass_H_
我们把模版的定义拆解来看
可以将template<class或者typename A> class 类名{}看成template <class A, class B> class myClass{ private: public: }
大前提()class 类名{执行方案}
2.类中函数模块的定义
在类模版中,不可避免的要用到函数模块。这是我们便要定义函数了。
void output();
按照上面的方法,将函数定义看作template<class A, class B> void myClass<A, B>::output() { //输出X,Y cout << "X:" << X << endl << "Y:" << Y << endl; }
大前提()返回类型 类名<>::函数模块名(形参){函数体}
最后,通过源程序检查是否成功
运行结果如图,成功#include<iostream> #include"Template.h" using namespace std; void main() { myClass<double, int>class1(2.9, 3); class1.output(); myClass<int, int>class2(10, 20); cout << class2.max() << endl; system("pause"); }
C++中template(模版)的使用
最新推荐文章于 2024-09-24 21:29:31 发布