类模板:
(1)对模板参数没有限制
(2)避免代码的重复
(3)注意重载的准确的匹配
(4)模板的组合技术(下一次用STL分析)
// #include "stdafx.h" //#include<iostreamstd::> #include "stdafx.h" #include <iostream> #include <string> #include <vector> using namespace std; vector<int> v; template <typename T>//加法函数模板 T Add(T x,T y) template <typename T>//在类模板定义之前,都需要加上模板声明 class BinaryOperation//二目运算类 { private: T x; T y; char op; void add() { std::cout<<x<<op<<y<<"="<<x+y<<std::endl; } void sub() { std::cout<<x<<op<<y<<"="<<x-y<<std::endl; } void mul(); void div(); public: BinaryOperation(T x,T y):x(x),y(y) { } void determineOp(char op); }; //在类外定义成员函数: //在成员函数定义之前进行模板声明, //且在成员函数名之前加上"类名<类型参数>::" template <typename T> void BinaryOperation <typename T>::mul() { std::cout<<x<<op<<y<<"="<<x*y<<std::endl; } template <typename T> void BinaryOperation <typename T>::div() { std::cout<<x<<op<<y<<"="<<x/y<<std::endl; } template <typename T> void BinaryOperation <typename T>::determineOp(char op) { this->op=op; switch(op) { case'+': add(); break; case'-': sub(); break; case'*': mul(); break; case'/': div(); break; default: break; } } int main() { BinaryOperation<double> op(12.5,14.6); op.determineOp('+'); op.determineOp('-'); op.determineOp('*'); op.determineOp('/'); system("pause"); return 0; } { return x+y; } int main() { int x=10,y=10; std::cout<<Add(x,y)<<std::endl;//相当于调用函数int Add(int,int) double x1=10.10,y1=10.10; std::cout<<Add(x1,y1)<<std::endl;//相当于调用函数double Add(double,double) long x2=9999,y2=9999; std::cout<<Add(x2,y2)<<std::endl;//相当于调用函数long Add(long,long) return 0; }