C++模板
来源:互联网 发布:collator java 编辑:程序博客网 时间:2024/05/21 09:51
忆十整理:C++知识点3(模板)
/***************忆十代码***************/
1、模版函数:
注:A、模板类型并不具有隐式类型转换;
B、如果用到的T实例化成类类型,那么对运算符的处理方面应当进行重载;
C、函数模板亦可重载;
格式:
template 函数形参表
返回值 函数名(形参表)
{
函数体;
}
示例1:
template<class T> //这里也可以用typename代替calss
T min(T x,T y)
{
return ((x>y)?x:y);
}
示例2:
/***************忆十代码***************/
#include<iostream.h>
class MyClass
{
int x,y;
public:
MyClass(int x,int y) //构造函数
{
this->x=x;
this->y=y;
}
int getx(){return x;}
int gety(){return y;}
int operator < (MyClass &c);
};
intMyClass::operator <(MyClass &c) //定义重载“<”运算符
{
if(x<c.x && y<c.y)
return 1;
else
return 0;
}
template<class T> //函数模板声明
T &Min(T&o1,T &o2)
{
if(o1<o2) //若被实例化为类类型,则对<进行重载,否则使用标准<运算符
return o1;
return o2;
}
void main()
{
MyClass s1(5,11);
MyClass s2(6,18);
MyClass s3=Min(s1,s2); //重载运算符重载
cout<<"最小的坐标:("<<s3.getx()<<","<<s3.gety()<<")"<<endl;
double d1=2.35;
double d2=5.3;
cout<<"较小的数:"<<Min(d1,d2)<<endl; //一般比较
}
/***************忆十代码***************/
2、类模板:
格式:
Template类型形参表
Class类名
{
类声明体;
};
Template 类型形参表
返回值类型 类名 类型名表::成员函数(形参表)
{
成员函数定义体;
}
注意:当类模板的成员函数在外部实现时也要加上“template 类型形参表”
示例1(类模板简单应用):
/***************忆十代码***************/
#include <iostream.h>
template <class T>
class Array
{
intsize;
T*aptr; //T为类型参数
public:
Array(intslots=1)
{
size=slots;
aptr=newT[slots]; //为动态数组分配内存空间
}
voidfill_Array();
voiddisp_Array();
~Array()
{
delete[] aptr;
}
};
template <class T> //注意这里,勿忘
void Array<T>::fill_Array() //总是忘记格式
{
cout<<"(输入"<<size<<"个数据)"<<endl;
for(inti=0;i<size;i++)
{
cout<<"第"<<i+1<<"个数据:";
cin>>aptr[i];
}
}
template <class T>
void Array<T>::disp_Array()
{
for(inti=0;i<size;i++)
cout<<aptr[i]<<"";
cout<<endl;
}
void main()
{
Array<char>ac(5); //Array<char>为模板类,ac(5)定义模板类的实例对象
cout<<"填充一个字符数组";
ac.fill_Array();
cout<<"数组的内容是:";
ac.disp_Array();
Array<double>ad(3);
cout<<"填充一个双精度的数组:"<<endl;
ad.fill_Array();
cout<<"数组的内容是:";
ad.disp_Array();
}
/***************忆十代码***************/
示例2(类模板作为函数参数):
void fun(MyClass<T> x) //类模板作为函数参数
{
cout<<x.abs()<<endl;
}
示例3(类模板作为友元函数的形参类型):
template <class T> //类的成员函数的外部定义
MyClass<T> operator+(MyClass<T> m1,MyClass<T> m2)
{
MyClass<T>tmp; //这里都要用到MyClass<T>
tmp.x=s1.x+s2.x;
returntmp;
}
示例4(类模板与静态成员):
#include <iostream.h>
template <class T>
class A
{
Tm;
staticT n;
public:
A(Ta):m(a){n+=m;}
voiddisp()
{
cout<<"m="<<m<<",n="<<n<<endl;
}
};
template <class T>
T A<T>::n=0; //静态数据初始化
void main()
{
A<int>a(2),b(3); //每一个实例化的类型分配一个静态成员
a.disp();
b.disp();
A<double>c(1.2),d(4.6);
c.disp();
d.disp();
}
/***************忆十代码***************/
- C++-模板
- C++-模板
- C++:模板
- C++:模板
- C++:模板
- 模板 (C++)
- C ++ 模板
- C ++ 模板
- 【C++】模板
- c++----------模板
- C++--------------------------------------------模板
- c++--模板
- C++:模板
- 【基础C&C++】模板
- 【c/c++】类模板
- 【C/C++】模板类
- 【c++】模板和模板类
- C/C++:函数模板与类模板
- JavaScript在IE和Firefox(火狐)的不兼容问题解决方法小结
- MapR初体验
- C++运算符重载
- 从 Linux 内核访问用户空间内存
- css超链接
- C++模板
- 解说Win32的窗口子类化
- Android4.0 CalendarProvider一些文档及资料
- Linux 网络编程基础(一) ---------------客户端/服务器的简单实现
- 初学驱动逆向,笔记一。
- .net,c#环境下,Datalist和Repeater的基础用法实例
- 360测试机器的硬件性能得分
- strcpy
- 解决<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" 过长