首页 理论教育C++对象存储程序设计基础教程

C++对象存储程序设计基础教程

【摘要】:图2.3对象stu1和stu2实际上,类Student的所有成员函数放在公用区中,每个函数代码有一个地址,类Student的每个对象中只存放自己的数据成员值和指向公共区中对应函数的地址,也就是说,类的成员函数是共享的,如图2.4所示,这种对象的存储空间分配方式不仅节省了存储空间,而且各个对象的数据成员分别存放,互不相干。

实际上,C++为每一个对象的数据成员分配内存空间,类中的所有成员函数只生成一个副本,而该类的每个对象执行相同的函数成员副本。因此在描绘类图时,通常将显示类中所有的成员。然而在描绘类的对象图时,将只显示其数据成员。

实际上,对象也像变量一样,可以定义全局对象或静态对象等,它们的存储空间类型和作用域与全局变量或静态变量是一样的。

【例2.4】分析以下程序的执行结果。

解:上述程序中声明Student类,并定义了两个对象stu1和stu2(给这两个对象分配存储空间),分别调用两个成员函数输入和输出它们的数据成员值,最后输出这两个对象占用的内存空间大小。程序执行结果如下:

学号:101姓名:王一

学号:108姓名:李二

16(www.chuimin.cn)

16

从结果看到,为对象stu1和stu2分配的内存空间均为16(=sizeof(no)+sizeof(name)),恰好为Student类中数据成员占用的内存空间之和。图2.3显示了对象s1和s2中相应的数据成员值。

图2.3 对象stu1和stu2

实际上,类Student的所有成员函数放在公用区中(只保存一份),每个函数代码有一个地址,类Student的每个对象中只存放自己的数据成员值和指向公共区中对应函数的地址,也就是说,类的成员函数是共享的,如图2.4所示,这种对象的存储空间分配方式不仅节省了存储空间,而且各个对象的数据成员分别存放,互不相干。

图2.4 对象的存储空间分配