CPP-基础:模板

// template.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include <iostream>

#include <string> 
#include <vector>
#include <algorithm>

#include <ctime> // std::time
#include <cstdlib> // std::rand, std::srand
using namespace std;

//类模板/////////////////////////////////////////////////
template<class T1,class T2>
class myClass{
  private:
    T1 I;
    T2 J;
  public:
    myClass(T1 a, T2 b);//Constructor
    void show();
    T1 Sums();
};
//这是构造函数 ,注意这些格式 template <typename T1,typename T2> myClass<T1,T2>::myClass(T1 a,T2 b):I(a),J(b) {}
//这是void show(); template <typename T1,typename T2> void myClass<T1,T2>::show() {   cout<<"I="<<I<<", J="<<J<<endl; }
//这是Sums函数 template <typename T1,typename T2> T1 myClass<T1,T2>::Sums() {   return I; } ////////////////////////////////////////////////////////

template<class A,class B> class CTemplate { private:   A aa;   B bb; public:   CTemplate(A a, B b);   void setdata(A n1,B n2);   A getdataA();   B getdataB(); };
template
<typename A,typename B> CTemplate<A,B>::CTemplate(A a, B b):aa(a),bb(b) {}
template
<typename A,typename B> void CTemplate<A,B>::setdata(A n1,B n2) {   aa = n1;   bb = n2; }
template
<typename A,typename B> A CTemplate<A,B>::getdataA() {   cout<<"aa:"<<aa<<" "<<endl;   return aa; };
template
<typename A,typename B> B CTemplate<A,B>::getdataB() {   cout<<"bb:"<<bb<<" "<<endl;   return bb; };
//函数模板////////////////////////////////////////////// template <typename T1, typename T2> void FunctionTemplate(T1 a, T2 b) {   cout<<"a:"<<a<<" "<<"b:"<<b<<endl; } ////////////////////////////////////////////////////////
}int _tmain(int argc, _TCHAR* argv[])
{
  myClass<int,int> class1(3,5);
  class1.show();

  myClass<int,char> class2(3,'a');
  class2.show();

  myClass<double,int> class3(2.9,10);
  class3.show();

  myClass<float,float> class4(3.1,2.5);
  float ff=class4.Sums();
  cout<<"ff:"<<ff<<endl;
  ///////////////////////////////////////////////////
  CTemplate<int, int> o_Tmeplate1(1,2);
  //o_Tmeplate1.setdata(3,4);
  o_Tmeplate1.getdataA();
  o_Tmeplate1.getdataB();

  CTemplate<float,float> o_Tmeplate2(2.003,3.001);
  o_Tmeplate2.getdataA();
  o_Tmeplate2.getdataB();


  ///////////////////////////////////////////////////
  int a =3 ;
  int b = 5;
  FunctionTemplate(a,b);

  double d =3.3 ;
  double c = 5.5;
  FunctionTemplate(d,c);
  ///////////////////////////////////////////////////

  system("PAUSE");
  return 0;
}

 

posted @ 2013-09-13 17:29  CPYER  阅读(472)  评论(0编辑  收藏  举报