程序设计是指设计、编写和调试程序的方法与过程。由于程序是软件的本体,因此软件的质量主要通过程序的质量体现,因此,研究一种切实可行的程序设计方法至关重要。继承是面向对象程序设计方法的一个重要标志,利用继承机制可以大大提高程序的可重用性和可扩充性。......
2025-09-30
在第2章中讨论过类对象的存储组织,每一个对象都占用一块存储空间,其中仅存放该对象的非静态数据成员,而静态数据成员以及成员函数则整个类才存放一份。
派生类的对象不仅存放了在派生类中定义的非静态数据成员,而且也存放了从基类中继承下来的所有非静态数据成员,因而在派生类中存放的这些从基类继承下来的数据存储又称派生类对象的子对象。
注意,即使基类中的私有数据成员不能继承到派生类中,但C++编译系统也为派生类对象分配基类中这些私有数据的存储空间。这种做法在大多数情况下并不会引起太大的内存占用问题。
例如,有以下程序:
上述程序中声明了一个类A,从该类派生出类B(属单继承的情况),这两个类中有一个同名的私有数据成员tag。程序的执行结果如下:
A:no=1,name=张三,tag=56
A:no=2,name=李四,tag=100
B:tag=200(https://www.chuimin.cn)
a:20
b:24
从结果看到,类A有3个私有数据成员,其对象a所占存储空间大小为18(sizeof(no)+sizeof(name)+sizeof(tag)),类B是从类A公有派生,尽管B∷tag与A∷tag重名,但A∷tag也占用类B对象的存储空间,所以类B对象b所占存储空间大小为22(=sizeof(A∷no)+sizeof(A∷name)+sizeof(A∷tag)+sizeof(B∷tag)),但由于A∷no,A∷name和A∷tag均为基类的私有成员,所以在类B中不能访问它们。
在main函数中,执行a.setvaluea(1,"张三",56);b.setvalueb(2,"李四",100,200);两个语句后,对象a和b的存储空间分配如图6.8所示。
图6.8 对象a和b的存储空间分配
与非静态数据成员存储方式不同,基类与派生类的静态数据成员与成员函数是共享的。在整个类层次中,基类A中定义的成员函数setvaluea和dispa以及派生类B中定义的成员函数setvalueb和dispb等都只保存一份代码。当派生类B对象使用从基类A继承下来的setvaluea和dispa成员函数时,编译系统会自动将这一调用映射到基类存放的代码。
相关文章
程序设计是指设计、编写和调试程序的方法与过程。由于程序是软件的本体,因此软件的质量主要通过程序的质量体现,因此,研究一种切实可行的程序设计方法至关重要。继承是面向对象程序设计方法的一个重要标志,利用继承机制可以大大提高程序的可重用性和可扩充性。......
2025-09-30
如同一个变量一样,对象从被创建到被释放为止的时间称为对象的生存期。一个对象的生存期如图2.8所示。从上看到,分配对象的内存空间和调用构造函数进行数据成员初始化是两个不同的阶段。构造函数帮助对象自动进行初始化,并且初始化的同时可以执行其他操作。......
2025-09-30
同样,类模板不能直接使用,必须先实例化为相应的模板类,定义该模板类的对象后才能使用。程序的一次执行如下:填充一个字符数组第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类模板、模板类和对象之间的关系......
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
在类声明中,public、private和protected是关键字,称为成员访问限定符,它们分别表示公有、私有和保护的成员访问权限。其他函数不能访问该类的保护数据成员,也不能调用该类的保护成员函数。◇一旦给出了成员访问限定符,它后面的成员都具有这个成员访问权限,直到出现另一个成员访问限定符或类声明结束为止。类的成员函数可以访问类的所有成员,没有任何限制,而类的对象对类的成员的访问是受成员访问控制符制约的。......
2025-09-30
相关推荐