如果将一个对象说明为常对象,则通过该常对象只能调用它的常成员函数,而不能调用其他成员函数。只能通过构造函数的参数初始化表对常数据成员进行初始化。这样,在执行构造函数时自动将“常数据成员1”赋值为“参数1”的值,“常数据成员2”赋值为“参数2”的值,…......
2025-09-30
同样,类模板不能直接使用,必须先实例化为相应的模板类,定义该模板类的对象后才能使用。
声明类模板之后,创建模板类的一般格式如下:
类模板名<类型实参表>对象表;
其中,“类型实参表”应与该类模板中的“模板参数表”相匹配。“对象表”是定义该模板类的一个或多个对象。
如对前面说明的类模板TClass的实例化可以这样进行:
TClass<double,500>sc;
实例化中所用的实参必须和类模板中定义的形参具有同样的顺序和类型,如以下实例化会造成编译错误:
TClass<double,500U>sc;
这是因为,类模板中定义的表达式参数int exp1和类型(unsigned int)500U不匹配。
使用类模板实例化模板类时要注意一个事情,在类模板中进行的运算必须适合于实例化时指定的类型。例如,前面例5.7中TClass1类模板,可以实例化为TClass1<int>或TClass1<double>,但实例化为TClass1<char>时出错,因为在调用add成员函数时不能进行两个字符的相加运算。
【例5.8】分析以下程序的执行结果。
解:上述程序中声明了一个类模板Array<T>,其私有数据成员size是一个整数,代表动态数组的大小,还有一个指针,当实例化模板类时,它指向定义类型的数组对象,构造函数中使用类型参数T来分配数组对象的空间,它的大小在模板类定义中已经确定:
Array<char>ac(10);
这样,实例化类模板Array<T>的模板类Array<char>,并实例化该模板类的对象ac,从而为ac对象定义和分配了内存空间,然后调用两个类成员函数fill_array和disp_array。该程序中的类模板、模板类和对象之间的关系如图5.3所示。程序的一次执行如下:(https://www.chuimin.cn)
填充一个字符数组(输入5个数据)
第1个数据:a↙
第2个数据:b↙
第3个数据:c↙
第4个数据:d↙
第5个数据:e↙
数组的内容是:a b c d e
填充一个双精度数组(输入3个数据)
第1个数据:1.2↙
第2个数据:5.6↙
第3个数据:3.1↙
数组的内容是:1.2 5.6 3.1
图5.3 类模板、模板类和对象之间的关系
相关文章
如果将一个对象说明为常对象,则通过该常对象只能调用它的常成员函数,而不能调用其他成员函数。只能通过构造函数的参数初始化表对常数据成员进行初始化。这样,在执行构造函数时自动将“常数据成员1”赋值为“参数1”的值,“常数据成员2”赋值为“参数2”的值,…......
2025-09-30
程序设计是指设计、编写和调试程序的方法与过程。由于程序是软件的本体,因此软件的质量主要通过程序的质量体现,因此,研究一种切实可行的程序设计方法至关重要。继承是面向对象程序设计方法的一个重要标志,利用继承机制可以大大提高程序的可重用性和可扩充性。......
2025-09-30
声明函数模板的一般格式如下:template<模板参数表>函数返回值类型函数模板名(形参表)函数模板定义由关键字template开头,表示声明一个模板。模板参数表写在尖括号<>中,参数一般由关键字class或typename后加一个标识符构成。Class和typename的意义相同,表示后面的标识符是一个参数类型,代表一个潜在的标准类型或用户定义的类型。例如,定义max函数模板求两个数中的较大者。如下面的声明是错误的:可以看出,用函数模板比函数重载更方便,程序更简洁。......
2025-09-30
编写一个程序,声明一个点类Point,实现点的偏移,==,!其中各个成员函数就是实现这种转换并完成相应的矩阵运算功能。程序的执行结果如下:A矩阵:123456B矩阵:123456C矩阵:142536A+B矩阵:2468 10 12A-B矩阵:000000A*C矩阵:14 3232 77虽然这种转换比较复杂,但解决了矩阵运算通用性问题。......
2025-09-30
程序的执行结果如下:v1=(6,8)v2=(3,6)v1+v2=v1-v2=(3,2)2.重载双目运算符为类的友元函数运算符也可以重载为类的友元函数,这样,它就可以自由地访问该类的任何数据成员。假设有一个类A,对于双目运算符op,如果重载运算符op使之能够实现表达式“obj1 op obj2”,其中obj1和obj2均为A类的对象。将例4.5的类Vector中重载运算符改为友元函数实现。......
2025-09-30
类的每一个成员函数都有一个隐含的特殊指针,通常称为this指针,this指针的类型就是成员函数所属的类型。通常不显式使用this指针。this指针是C++实现封装的一种机制,它将对象和该对象调用的成员函数连接在一起,在外部看来,每个对象都拥有自己的成员函数。this指针一般用于返回当前对象自身。程序的执行结果如下:s1∶n=2s2∶n=1s3∶n=3this指针大量用于运算符重载成员函数设计中,这将在后面详细介绍。......
2025-09-30
C++是一种编译性的语言,设计好一个C++源程序后,需要经过编译、连接,生成可执行的程序文件,然后执行并调试程序。当C++源程序设计好后,程序员利用一个编辑系统将源程序输入计算机中的某一个文件中,并进行必要的修改。C++源程序文件的扩展名为.cpp。在VC++6.0环境中,编译和连接两个步骤是由系统本身一次完成的。完整的C++程序的开发步骤如图1.2所示。图1.2C++程序开发步骤......
2025-09-30
C++中,语句默认都是顺序执行,如果碰到选择或循环语句,顺序执行的规则就要改变。C++中的选择控制语句有if语句、if...else语句、if...else if语句和sw itch语句。对于简单的if...else语句,可以使用条件运算符来代替。“语句1”、“语句2”、…使用sw itch语句应注意下列问题:◇整型表达式包括字符型或枚举型表达式。......
2025-09-30
相关推荐