📄 ex20.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 + -