对于C++模板类的初次尝试
我超真的找不到实习嘛???
算了言归正传。
在大学期间其实大部分时间都用不上C++的模板,学校老师也不教,导致我出来以后对这个机制没有认知,只能从零开始。苦涩/(ㄒoㄒ)/~~
C++的模板类和模板函数其实很简单,就是C++”泛函“的实现,有了它,你就可以向模板类和模板函数中传入任意类型的参数,并且内部可以十分方便地使用类模板的形参类型对变量进行声明。
#include <iostream> using namespace std; template<typename T> class Animal//类模板的声明 { private: T a1; T a2; public: Animal(T a1,T a2); T show(); }; template<typename T> Animal<T>::Animal(T x1,T x2)//类外定义类模板的构造函数 { this->a1 = x1; this->a2 = x2; } template<typename T> T Animal<T>::show(){//类外定义类模板的函数 return this->a1 + this->a2; } int main(void) { string a1 = "cat"; string a2 = "dog"; Animal<string> animal(a1,a2);//注意,类模板在创建时必须要指明模板形参的类型!!! cout << animal.show(); return 0; }
学习模板类和模板函数最麻烦的,
就是如上段代码中所示的那种超长的模板类和外部调用模板类函数的声明。
我总结一下,模板函数、模板类的声明以及外部调用模板类函数的定义的规范写法:
- 函数模板格式:
template <模板形参列表> 函数返回类型 函数名(参数列表) {
函数体 } - 类模板格式:
template<函数形参列表> class 类名 { ... };
- 在类模板外部定义成员函数的格式:
template<模板形参列表> 函数返回类型 类名<模板形参名>::函数名(参数列表)
{
函数体
},其实都挺相似的,但是要多练才能记住。
注意,类模板在实例化时必须要指明模板形参的类型!!!
注意,类模板在实例化时必须要指明模板形参的类型!!!
注意,类模板在实例化时必须要指明模板形参的类型!!!
重要的事说三遍好吧。
还有一点要注意,函数模板为甚就不需要在实例化时指明模板形参的类型呢?
原因是模板函数的实例化是在编译程序处理函数调用时就自动完成了,当然就不需要手动指明类型了。