同样,类模板不能直接使用,必须先实例化为相应的模板类,定义该模板类的对象后才能使用。程序的一次执行如下:填充一个字符数组第1个数据:a↙第2个数据:b↙第3个数据:c↙第4个数据:d↙第5个数据:e↙数组的内容是:a b c d e填充一个双精度数组第1个数据:1.2↙第2个数据:5.6↙第3个数据:3.1↙数组的内容是:1.25.63.1图5.3类模板、模板类和对象之间的关系......
2023-11-07
类模板的成员函数被认为是函数模板,也称为类属函数。因此,当给出一个类模板的成员函数的定义时,必须遵循函数模板的定义。声明类模板的一般格式如下:
与函数模板相同,模板参数一般也是由关键字class或typename后面加一个标识符构成的,标识符即为类型参数名。在类模板中,可以用类型参数名表示数据成员的类型,也可以表示成员函数返回值、形参和局部变量的类型。如果类型形参多于一个,则每个形参都要使用关键词class或typename。模板参数表中可以包含非类型的普通参数,用来为类的成员提供初值。类模板中的成员函数可以是普通函数,也可以是函数模板。
例如,下面定义了一个名为Smemory的类模板,模板带类型参数T和普通参数n。
“模板参数表”也可以包含表达式参数,表达式参数经常是数值。对模板类进行实例化时给这些参数所提供的变量必须是常量表达式。类模板参数列表绝不能是空的,如果其中有一个以上的参数,则这些参数必须用逗号分开。例如:
类模板TClass的第二个参数是表达式,而第一和第三个参数是占位符。
注意:类模板的类型参数的名字不能重复,例如,以下语句是错误的:
template<class T,class T>//错误原因:类型参数名重复
在类模板定义中,若要表示类模板自身,则写作“类模板名<模板参数名表>”,此处不写关键字class和typename,模板参数名的顺序与模板参数表中的顺序一致。(www.chuimin.cn)
类模板定义中的类型参数可带默认值。
在类模板外部定义成员函数的格式如下:
template<模板参数表>
函数返回值类型类模板名<模板参数名表>∷成员函数名(形参表)
其中,模板参数表与类模板的模板参数表相同。
【例5.7】说明以下类模板的功能。
解:该类模板TClass1中用T表示一个类型参数,包含两个T类型的私有数据成员,成员函数add用于计算这两个私有数据的和,disp成员函数输出结果。
有关C++程序设计基础教程的文章
同样,类模板不能直接使用,必须先实例化为相应的模板类,定义该模板类的对象后才能使用。程序的一次执行如下:填充一个字符数组第1个数据:a↙第2个数据:b↙第3个数据:c↙第4个数据:d↙第5个数据:e↙数组的内容是:a b c d e填充一个双精度数组第1个数据:1.2↙第2个数据:5.6↙第3个数据:3.1↙数组的内容是:1.25.63.1图5.3类模板、模板类和对象之间的关系......
2023-11-07
类是一种用户自定义的数据类型,定义一个类,就是描述类名及其成员。“类名”是一个标识符,用于唯一标识一个类。分析以下声明MyClass类的组成。该类的描述如图2.1所示,其中大圆圈中列出的函数名均为公有函数名,小圆圈中列出的是所有数据成员。图2.1MyClass类描述注意:因为类是一种数据类型,在声明一个类时系统并不会为其分配内存空间,所以在定义类中的数据成员时,不能对其进行初始化。......
2023-11-07
声明函数模板的一般格式如下:template<模板参数表>函数返回值类型函数模板名(形参表)函数模板定义由关键字template开头,表示声明一个模板。模板参数表写在尖括号<>中,参数一般由关键字class或typename后加一个标识符构成。Class和typename的意义相同,表示后面的标识符是一个参数类型,代表一个潜在的标准类型或用户定义的类型。例如,定义max函数模板求两个数中的较大者。如下面的声明是错误的:可以看出,用函数模板比函数重载更方便,程序更简洁。......
2023-11-07
本节采用类模板设计几个通用的数据结构,这种类属程序设计方法不仅提高了程序的可靠性,而且大大提高了程序设计效率。抽象数据类型线性表的定义如下:设计满足上述定义的List
2023-11-07
所以,在定义派生类的构造函数时除了对自己的数据成员进行初始化外,还必须负责调用基类构造函数使基类的数据成员得以初始化。如果派生类中还有子对象,还应包含对子对象初始化的构造函数。最后执行派生类的构造函数。其中,如果派生类新增成员中有某个类的子对象,第步的调用才会执行,否则就直接跳转到第步,执行派生类的构造函数。在某些情况下,派生类构造函数的函数体可能为空,仅起到参数传递作用。......
2023-11-07
程序设计是指设计、编写和调试程序的方法与过程。由于程序是软件的本体,因此软件的质量主要通过程序的质量体现,因此,研究一种切实可行的程序设计方法至关重要。继承是面向对象程序设计方法的一个重要标志,利用继承机制可以大大提高程序的可重用性和可扩充性。......
2023-11-07
图6.18类层次图程序如下:本程序的执行结果如下:圆桌属性数据:高度:0.6米桌面半径:0.5米面积:0.785平方米颜色:白色设计一个虚基类Person,包含姓名和年龄私有数据成员以及相关的成员函数,由它派生出领导类Leader,包含职务和部门私有数据成员以及相关的成员函数,再由Person派生出工程师类Engineer,包含职称和专业私有数据成员以及相关的成员函数,然后由Leader和Engineer类派生出主任工程师类Chairman。......
2023-11-07
派生类的对象不仅存放了在派生类中定义的非静态数据成员,而且也存放了从基类中继承下来的所有非静态数据成员,因而在派生类中存放的这些从基类继承下来的数据存储又称派生类对象的子对象。图6.8对象a和b的存储空间分配与非静态数据成员存储方式不同,基类与派生类的静态数据成员与成员函数是共享的。当派生类B对象使用从基类A继承下来的setvaluea和dispa成员函数时,编译系统会自动将这一调用映射到基类存放的代码。......
2023-11-07
相关推荐