第9章模板辩析.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
#include iostream.h class Base //由普通类做基类 { public: Base( int i, char c ) { mInt = i; mChar = c; } int getIntVal( ) { return mInt; } char getCharVal( ) { return mChar; } * private: int mInt; char mChar; }; template class T class TDevied : public Base //派生类模板 { public: TDevied( T m, int i,char c): Base( i, c ) { member = m; } void setTVal( T temp ) { member = temp; } * T getTVal( ) { return member; } void ShowInfo( ) { cout member = member; cout mInt = getIntVal( ); cout mChar = getCharVal( ); coutendl; } private: T member; }; * int main( ) { TDevieddouble ObjectTD( 123.4, 100, A); cout ObjectTD.getIntVal( ) = ObjectTD.getIntVal( ); cout ObjectTD.getCharVal( ) = ObjectTD.getCharVal( ); coutendl; ObjectTD.ShowInfo( ); ObjectTD.setTVal( ObjectTD.getTVal( )+456.7 ); cout ObjectTD.getTVal( ) = ObjectTD.getTVal( )endl; ObjectTD.ShowInfo( ); return 0; } * 【运行结果】: 【分析与思考】: 从上例程序中可以看出,类Base是一个普通类;在第21行出现template,说明接下来声明的是模板;在第22行的代码中,声明了类模板TDevied是有基类Base公有派生的;从形式上看,由普通类派生类模板,在继承形式上与以前学过的形式完全一样。 在主函数的第49行代码中,用double做类型参数对类模板TDevied进行了实例化;在接下来的程序中,通过实例化后的模板类定义了对象ObjectTD,并通过该对象对各个成员函数进行了测试,包括派生类模板中从基类继承过来的函数。 * 9.4.2 类模板派生类模板 在由类模板派生类模板的方式下,基类模板和派生类模板的类型参数表可以相同也也以不同。 但需要说明的是,当声明派生类模板时,其继承方式后所指定的基类模板必须根据基类模板所声明的类型参数个数,用派生类模板所声明的类型参数来一一对应。 【例9-16】由类模板派生类模板示例 /* 9-16.cpp */ * #include iostream.h template class T class TBase //基类模板 { public: void ShowTB( T tb ) { couttb = tbendl; } }; template typename T1,typename T2 * class TDevied : public TBase T1 //派生类模板 { public: void ShowTD( T2 td ) { couttd = tdendl; } }; int main( ) { TDevied int, char ObjectTD; ObjectTD.ShowTB( 99 ); ObjectTD.ShowTD( X ); return 0; } * 【分析与思考】 在本例中,类模板TBase作为基类模板,由其派生Tdevied 成为派生类模板,派生方式在第12行声明,可以看到,与普通类的派生方式不同的是,需要在基类模板名后用尖括号声明给基类模板传递的类型参数;总结由基类模板派生派生类模板声明的一般形式为: template 类型参数表 class 派生类模板名:继承方式 基类模板名类型实参表 { //成员的定义 } * 类似普通类的派生,如果基类模板不是一个的话,需要分别写明继承方式,并用逗号隔开不同的基类模板名; 基类模板名右面尖括号内的类型实参的个数应与基类

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

我是一名原创力文库的爱好者!从事自由职业!

1亿VIP精品文档

相关文档