1 解决,不同类型数据的相同操作写大量冗余的代码
2 函数模板不是一个实在的函数,编译器不能为其生成可执行代码。定义函数模板后只是一个对函数功能框架的描述,当它具体执行时,将根据传递的实际参数决定其功能(百度百科)
3示例
// demo1.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> template<typename T> void Swap(T &a,T &b) { T x = a; a = b; b = x; return; } template<typename T>//每个函数都要重新写一次在函数头 T Sum(T *X,T *Y) { printf("SUM !"); *X = *X + 2.0; return (*Y + *X); } template<class A,class B> void printstr(A a,B b) { std::cout<<a<<"-----"<<b<<std::endl; } int sum2(int a ,int b) { printf(" sum2!"); return (a*2 + b); } int _tmain(int argc, _TCHAR* argv[]) { int x =1,y=2; Swap(x,y); float x1=0.0,x2 =1.1; Swap(x1,x2); printf("%d, %d, %f ,%f",x,y,x1,x2); //----------------------------------------------------- getchar(); float a =3.222; float b = 2.123; printf("%f, %f, %d",a,Sum(&a,&b),sum2(3,5));//从右到左先逐个计算各个表达式,然后从左到右逐个输出。 getchar(); //----------------------------------------------------- char* str = "cccccccccc"; int m = 0; printstr(str,m); getchar(); return 0; }
4 类模板
什么是默认构造函数:
A default constructor is a constructor which can be called with no arguments (either defined with an empty parameter list, or with default arguments provided for every parameter). A type with a public default constructor is DefaultConstructible.
//在.H中声明,注意你要用这个函数,就一定要定义所有会用到的东西,不能光声明 //仅声明不定义,会出现函数无法解析 #include <iostream> template<typename T> class TestC{ public: TestC();//这个是默认构造,不写,编译器给你生成;不过一旦显示的写出来了,就要你自己定义 ~TestC(); void setT(T t1); void PrintT(); private: T t; };
//.cpp #include "stdafx.h" #include <iostream> #include "Testc.h" template<typename T> TestC<T>::TestC(){}; template<typename T> TestC<T>::~TestC(){}; template<typename T> void TestC<T>::setT(T t1) { this->t = t1; } template<typename T> void TestC<T>::PrintT() { std::cout<<this->t <<std::endl;; } int _tmain(int argc, _TCHAR* argv[]) { TestC<char*> A; A.setT("test t"); A.PrintT(); getchar(); return 0; }
//构造函数如果不写,编译器生成默认无参构造。显示的写了构造,就必须实现它;