首页 > 编程知识 正文

c扩展模板算量,c语言课程设计的模板

时间:2023-05-03 05:33:02 阅读:169298 作者:4467

一、介绍类模板和函数模板的定义和使用相似。 在某些情况下,有两个以上的类,它们的功能相同,只是数据类型不同。

类模板用于实现类所需数据的类型参数化类模板对于表示数据结构(如数组、表和图)尤为重要,这些数据结构的表示和算法不受包含的数据类型的影响。 二、语法C中类模板的写法如下。

template类型参数表class类模板名称{成员函数和成员变量}; 类型表的格式如下。

将类模板中的成员函数放在类模板定义之外时的语法如下:

template类型参数表返回类型类模板名称类型参数名称列表:成员函数名称{ .}在类模板中定义对象的格式如下:

模板名称真型参数表对象名称(构造函数实际参数表); 如果类模板具有参数构造函数,则还可以使用以下格式:

类名真型参数表的对象名; 例如:

templateclasstclassperson { public : person (tid,T age ) {this-mAge=age; this-mId=id; }void Show () cout ' id : ' mid ' age : ' mage endl; }public:T mId; T mAge; (; 在调用void main ()//函数模板时,可以进行自动类型导出)//类模板必须明确指定类型personintp、22 )。 p.Show (; (三)类模板衍生普通类衍生类模板类模板也可以进行衍生类模板。 在这种情况下,派生类模板的参数表必须包含基类模板的参数。 模板类也和普通类一样有很多继承。 这意味着模板类之间允许继承多少。 可以从类模板派生新的类。 可以同时派生派生类模板和非模板类。

//类模板派生一般类templateclasstclassperson { public : person () } { mage=0; }public:T mAge; (; //型classsubperson 3360 publicpersonint { }; //类模板派生类模板templateclasstclassanimal { public : voidj () } { cout mage '动物在鸣叫!' endl; }public:T mAge; (; templateclasstclasscat 3360 publicanimalt { }; intmain(void ) {Catint cat; //指定类型return 0(四、类模板外部实现成员函数templateclasstclassperson )公共:个人(tage,T id ); void Show (; 私有: t mage; T mID; (; //外部实现函数templateclasstpersont :3360 person (tage,T id ) {this-mID=id; this-mAge=age; } templateclasstvoidpersont :3360 show () cout ' age : ' mage ' id : ' mid endl; (五)编译类模板首先,一个编译单元(translation unit )指向一个*.cpp文件和其所需的#include的所有. h文件。 h文件中的代码被扩展到包含它的. cpp文件(编译器将该. cpp文件编译为一个. obj文件) ),后者是可移植可执行的(PE * ) 编译器将单独编译项目中的所有*.cpp文件,然后使用连接器(linker )将其连接为. exe文件。

与类一样,类模板可以是实现和声明的组合,也可以将接口与实现分离。 但是编译器由于历史原因对分离编译的支持非常弱,不同平台的支持力度也不一样。

STL的类模板都是接口和实现在一起的,只要成为主流就可以了。 ***将文件另存为. hpp***类模板。 其本质是将. cpp的实现代码混合到. h头文件中,如果定义和实现都包含在同一个文件中,则该类的调用方只需include该hpp文件,就需要将cpp添加到project中进行编译)

六、类模板中static关键字不同类型参数的类静态成员变量是相互独立的,这是由类模板实现机制决定的。

# define _ CRT _ secure _ no _ warnings # includeiostreamusingnamespacestd; templateclasstclassperson { public : static inta; (; templateclasstintpersont 33603360 a=0; //类外初始化intmain(void ) {Personint p1、p2、p3; Personchar pp1、pp2、pp3; p1.a=10; pp1.a=100; cout p1.a ' ' p2.a ' ' p3.a endl; //输出101010 cout pp1.a ' ' pp2.a ' ' pp3.a endl; //输出100 100 100return 0; }相同类型、例如对应于int的类别模板对象之间的静态成员将被共享,而不同类型之间、例如对应于int、float、char的类别模板对象之间的静态成员将不被共享

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。