⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex20.cpp

📁 C/C++程序设计教程
💻 CPP
字号:

         ///     [例20.1]函数模板和函数重载
	#include <stdio.h>	
	template <class T>                      //模板带类参,类参T的作用域始于尖括号
	void swap(T  x,T  y)                   //模板函数形参表中类参出现两次  
	{   T temp;                           //类参T抽象地定义局部变量
		 temp=x;x=y;y=temp;             //模板函数中的代码是雷同的
		 switch(sizeof(T))
         {    default:printf("T=TYPE;");
		      case sizeof(long):printf("T=long;"); break;
              case sizeof(double):printf("T=double;"); break;
		 }
	}                                   
	void main()
	{     	long a(10),b(20);           
			swap(a,b);
			double d=30.66;		
			swap<double>(d,b);   //输出:T=long; T=double;
	}   
//	[例20.2] 模板函数和定制的同名函数
	#include <stdio.h>
    template < class T1, typename T2>
    void Show(T1 v1,T2 v2)
    {
	 printf("sizeof(T1)=%d,sizeof(T2)=%d\n",sizeof(T1),sizeof(T2));
	}
    void Show(float,long)           //特殊化的重载函数
    {  printf("float=%d,long=%d\n",sizeof(float),sizeof(long));	}
	 class B                                  //声明一个class B的类,类名为B 
	 {  public :     B(long k=1){ x=k;}
	   long  x;	   float y;             //两个公共成员分别为long、float型
	};
	 void main()
    {  B b;                           //程序运行输出结果如下:
	  Show(b.y,b.x);                    // float=4,long=4
      Show(2.0f,b);	                  //sizeof(T1)=4,sizeof(T2)=8
	  Show(1.0,'c');                     //sizeof(T1)=8,sizeof(T2)=1
	 }
//[例20.3] 两个类参的类模板
    #include <iostream.h>
	template < class T1,class T2 >                     //模板带两个类参T1,T2
	class CType                                  //如果T1对应内置数据类型
    {		public:                                    //则m_t1Data是简单变量
		 T1   m_t1Data;                           //如果T2对应class类型  
		 T2   m_t2Data;                           // 则m_t2Data是嵌入对象 
		 CType(T1 v1,T2 v2); 	                     //此时CType<T1,T2>为包容类
		 void  Show();	
	};
	template <class T1,class T2 >  
	 CType<T1,T2>::CType(T1 v1,T2 v2)
	{	m_t1Data=v1;	    m_t2Data=v2;		}
	template <class T1,class T2 >  
	 inline void CType<T1,T2>::Show()
	{	  cout<<m_t1Data<<"--"<<m_t2Data<<endl;		}	
    void main()                                         //程序运行输出结果:
	{	{CType<char, long> obj('c','c');          obj.Show();}//c--99
		{CType<long,char*> obj('C',"c is letter");  obj.Show();}//67-- c is letter
	}




304



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -