![]() ![]() |
|
计算机等级考试二级C++各章内容摘要:第9章 | |
作者:佚名 文章来源:不详 点击数 更新时间:2008/4/18 14:39:31 文章录入:杜斌 责任编辑:杜斌 | |
|
|
第9章 模板 2.模板实参的省略在调用一个模板函数时,编译系统需要足够的信息来判别每个虚拟类型参数所对应的实际类型,可以从两个不同的渠道获得这样的信息:从模板实参表(用和括起来的参数表)或从模板函数实参表(用(和)括起来的参数表),模板实参的信息优先于函数实参的信息。如果从后者获得的信息已经能够判定其中部分或全部虚拟类型参数所对应的实际参数,而且它们又正好是参数表中最后的若干参数,则模板实参表中的那几个参数可以省略。如果模板实参表中的实参都被省略了,则连空表也可以不要。因此,若x和y都是unsigned型,则addTounsigned(x,y,9)、addT (x、y、9)和addTo(x,y,9)三者是等价的。反之,对于某个模板实参,如果从模板函数的实参表中无法获得同样的信息,就不能省略;或者虽然能够获得同样的信息,但在它后面还有其他不能省略的实参,则其自身还是不能省略。下面列举几种模板实参不能省略的情况。(1)从模板函数实参表获得的信息矛盾。(2)需要获得特定类型的返回值,而不管参数的类型如何。(3)虚拟类型参数没有出现在模板函数的形参表中。(4)函数模板含有常规形参。 3、函数模板的定制对不同的数据类型在处理形式上的统一性是建立模板的基础。但是,这种统一性是相对的,个别数据类型有可能比较特殊,在处理形式上与大多数数据类型不一致。针对这样的特殊情况,可以通过重载模板函数进行定制。这样把重载的模板称为补充模板,相应地,原模板则称为主模板。 【考点二】类模板 2、类模板的派生与继承一谈到继承总涉及到两个类:基类和派生类,它们中任何一个都有可能是模板类,或模板类的实例。下面列出常见的几种情况。(1)普通类继承类模板的一个实例。可以通过继承类模板的一个实例来声明一个类。(2)模板类继承普通类。在声明一个类模板时,应尽可能将类模板中与虚拟类型参数无关的成员剥离出来,构成一个普通类,作为类模板的基类。因此,类模板继承普通类的情况是十分常见的。(3)模板类继承模板类。可以通过继承一个模板类来声明一个类模板。(4)模板类继承模板参数给出的基类。模板的派生甚至可以继承一个未知的基类。也就是说,继承哪个基类由模板参数决定。 3、类模板的定制与函数模板类似,类模板有时也需要定制,以适应某些特殊情况。类模板的定制也是通过定义补充模板实现的,称为模板的特例化,每个补充模板就是主模板的一个特例。
|
|
![]() ![]() |