问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

什么是类模板?使用MFC类模板必须包含哪个头文件?

发布网友 发布时间:2022-05-03 12:32

我来回答

1个回答

热心网友 时间:2022-06-20 03:40

类模板,是对一批仅仅成员数据类型不同的类的抽象,程序员只要为这一批类所组成的整个类家族创建一个类模板,给出一套程序代码,就可以用来生成多种具体的类,(这类可以看作是类模板的实例),从而大大提高编程的效率。
定义类模板的一般形式是:
template <类型名 参数名1,类型名 参数名2,…>
class 类名
{
类声明体
};
例如,template <class T>
class Smemory
{…
public:
void mput(T x);

}
表示定义一个名为Smemory的类模板,其中带类型参数T。
在类模板的外部定义类成员函数的一般形式是:
template <类型名 参数名1,类型名 参数名2,…>
函数返回值类型 类名<参数名 1 参数名 2,…>::成员函数名(形参表)
{
函数体
}
例如:template <class T>
void Smemory<T>::mput(T x)
{…}
表示定义一个类模板Smemory的成员函数,函数名为mput,形参x的类型是T,函数无返回值。
类模板是一个类家族的抽象,它只是对类的描述,编译程序不为类模板(包括成员函数定义)创建程序代码,但是通过对类模板的实例化可以生成一个具体的类以及该具体类的对象。
与函数模板不同的是:函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化必须由程序员在程序中显式地指定,
其实例化的一般形式是:
类名 <数据类型 1(或数据),数据类型 2(或数据)…> 对象名
例如,Smemory<int> mol;
表示将类模板Smemory的类型参数T全部替换成int 型,从而创建一个具体的类,并生成该具体类的一个对象mol。
类模板示例:
类模板定义 定义一个类模板,一般有两方面的内容:
A. 首先要定义类,其格式为:
template <class T> //或用 template<typename T>
class foo
{
……
}
foo 为类名,在类定义体中,通用类型T可以作为普通成员变量的类型,还可以作为const和static成员变量以及成员函数的参数和返回类型之用。例如:
template<class T>
class Test{
private:
T n;
const T i;
static T cnt;
public:
Test():i(0){}
Test(T k);
~Test(){}
void print();
T operator+(T x);
};
B. 在类定义体外定义成员函数时,若此成员函数中有模板参数存在,则除了需要和一般类的体外定义成员函数一样的定义外,还需在函数体外进行模板声明
例如
template<class T>
Test<T>::Test(T k):i(k){n=k;cnt++;}
如果函数是以通用类型为返回类型,则要在函数名前的类名后缀上“<T>” (注:所有函数都要加“<T>” )。例如:
template<class T>
T Test<T>::operator+(T x){
return n + x;
}
C. 在类定义体外初始化const成员和static成员变量的做法和普通类体外初始化const成员和static成员变量的做法基本上是一样的,唯一的区别是需在对模板进行声明,例如
template<class T>
int Test<T>::cnt=0;
template<class T>
Test<T>::Test(T k):i(k){n=k;cnt++;}
类模板的使用:
类模板的使用实际上是将类模板实例化成一个具体的类,它的格式为:类名<实际的类型>。
模板类是类模板实例化后的一个产物。说个形象点的例子吧。我把类模板比作一个做饼干同的模子,而模板类就是用这个模子做出来的饼干,至于这个饼干是什么味道的就要看你自己在实例化时用的是什么材料了,你可以做巧克力饼干,也可以做豆沙饼干,这些饼干的除了材料不一样外,其他的东西都是一样的了。
类模板的派生:
可以从类模板派生出新的类,既可以派生类模板,也可以派生非模板类。派生方法:
⑴ 从类模板派生类模板可以从类模板派生出新的类模板,它的派生格式如下例所示:
template <class T>
class base
{
……
};
template <class T>
class derive:public base<T>
{
……
};
与一般的类派生定义相似,只是在指出它的基类时要缀上模板参数,即base<T>。
⑵ 从类模板派生非模板类 可以从类模板派生出非模板类,在派生中,作为非模板类的基类,必须是类模板实例化后的模板类,并且在定义派生类前不需要模板声明语句:template<class>。例如:
template <class T>
class base
{
……
};
class derive:public base<int>
{
……
};
在定义derive类时,base已实例化成了int型的模板类。

参考资料:http://ke.baidu.com/view/1306452.htm?fr=ala0_1

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
急求高人解答 ···管理类的问题 ···!!!急急急···我会在线等... ...如果基层管理幅度为8,高层管理人员管理幅度为3,则该公司中层管理人员... ...发生化学变化的实质是( )A.分子间隔发生变化B.物质状态发生改变C... 下列变化不能说明发生了化学变化的是( )A.变化时有电子的得失或共用电... 下列描述正确的是( )A.固态物质的分子间无间隔B.液态物质的分子不断运动... 原来微信打开这个功能,能够看到马路上的街景,涨知识了! ...百度帐号被人在异地登录了,问题是没有任何人知道我的密码啊?而且也... 医疗事故纠纷和医疗损害纠纷的区别是什么 医疗纠纷与医疗事故的定义是什么? 医疗事故纠纷是指什么的 c++创建链表为什么要用类模板 请教一下哪里有专门做遮阳伞、罗马伞、侧边伞的? 如何处理类模板深拷贝或浅拷贝问题 ...家里网是好的,手机,电脑都可以用,小度也可以连接热点? 如果在类模板的定义中有一个静态数据成员 则在程序运行时产生几个静态变量 类模版 在这题中怎么把成员函数正确定义在类外 谢谢了 北京哪里的遮阳伞价格合理,售后最好呀! 类模板的定义与使用 C++模板类和类模板 学到了类模板,但完全不理解,求高手指点,最好附上例子,谢谢 了 C++问题求解,在类中为什么不能给数据成员初始化值: 什么是类模板? 为什么word上做表格,表格下面没有办法写字 类中静态数据成员问题 类模板成员函数:cannot access private member 错误释疑 为什么在word中画了表格后不能写入文字的呢? 一个C++问题,声明一个类模板MB,有数据成员x和y··· 不可以成为类的数据成员的是______ A自身类的对象 B另一个类的对象 C自身类的指针或引用 在java中,是不是 类 有数据成员和成员方法,对象 也有数据成员和成员方法 鲨鱼怎么烧好吃 模板类的中的模板数据成员如何初始化? C++中, 类的私有数据成员在定义的时候不能进行初始化吗? 企石哪里遮阳伞出租 已持有工行电子密码器,如何再办理U盾? 苏州电视广告有限公司怎么样? 寻找苏州电视放的一个公益广告 为什么在苏州 东方卫视的广告会被掐掉? 要在江苏电视台打广告,如何联系? 在苏州电视台上黄金时间段播一个5秒中的广告需要多少费用? 苏州有线电视台播放很恶心的电影 苏州电视台服务公司怎么样? 苏州有哪些媒体 急急~~ 江苏电视台广告部 以前是苏州电视台的主持人,后来做广告生意的是谁 最近在央视看到一个介绍苏州各个区县的宣传广告,哪里可以看到这段视频? 在苏州差点被“黑”,如何找电视台曝光黑幕? 求苏州华润置地平门府电视广告的背景音乐 中烟新商盟订烟属于往上缴费还是转账 如何把数据导入到mysql数据库 电脑安装创新5.1声卡怎样连接音响