- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 例如:我们可以定义一个日期类Date,通过常成员函数来读出年、月、日 1 2 3 4 5 6 7 8 9 10 11 class Date { private: int Y, M, D; public: int year() const; int month() const; int day() const {return D; }; int day(){return D++;} int AddYear(int i) {return Y+i; }; }; * 有下列容易出现的错误: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ① int Date::month() //错误:常成员函数实现不能缺少const { return M; } ② int Date::year() const { // return Y++; //错误:常成员函数不能更新类的数据成员 return Y; } ③ Date const d1; // int j=d1.AddYear(10); //错误:不能调用非常成员函数 int j= d1. year(); //正确 ④ Date d2; int i=d2.year(); //正确,非常对象可以调用常成员函数 d2.day(); //正确,非常对象可以调用非常成员函数 * 7.7 对象的内存分布 类只是一个型,除了静态数据成员外,在没有实例化成对象前不占任何内存。 类的静态数据成员与全局对象(变量)一样,在数据段中分配内存。 对象的内存空间分配 当类被实例化成对象后,不同类别的对象占据不同类型的内存,其规律与普通变量相同: (1) 建立的全局对象占有数据段的内存。 (2) 建立的局部对象内存分配在栈中。 (3) 函数调用时为实参建立的临时对象内存分配在栈中。 (4) 使用动态内存分配语句new建立的动态对象,内存在堆中分配。 * 7.7 对象的内存分布 程序运行时,系统只为各对象的数据成员分配单独的内存空间,对象的内存空间分配有下列规则: ① 对象的数据成员与成员函数占据不同的内存空间,数据成员的内存空间与对象的存储类别相关,成员函数的内存空间在代码段中。 ② 一个类所有对象的数据成员拥用各自的内存空间。 ③ 一个类所有对象的成员函数为该类的所有对象共享,在内存中,只有一个拷贝。 * 7.7 对象的内存分布 2. 对象内存空间的释放 随着对象的生命周期的结束,对象所占的空间就会释放,各类对象内存空间释放时间与方法如下: (1) 全局对象数据成员占有的内存空间在程序结束时释放。 (2) 局部对象与实参对象数据成员的内存空间在函数调用结束时释放 (3) 动态对象数据成员的内存空间要使用delete语句释放。 (4) 对象的成员函数的内存空间在该类的所有对象生命周期结束时自动释放。 本章小结 ◇在面向对象的程序设计中,程序模块是由类构成的。类是对逻辑上相关的函数与数据的封装,它是对问题的抽象描述。 ◇ 类中有数据成员与成员函数,成员的访问控制属性有private、protected、public。类内可以访问所有控制属性的成员,在类外通过对象只能访问控制属性为public的成员。 ◇ 类是“型”,不占内存,使用类建立对象后,占有内存空间。 ◇ 建立对象时调用构造函数初始化对象的数据成员,一个类提供默认的构造函数与默认的拷贝构造函数。默认的构造函数是空的,默认的拷贝构造函数的内容为浅拷贝语句。对象消失时会调用析构函数。构造函数与析构函数都可以重新定义
原创力文档


文档评论(0)