- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
3.11 补充:返回对象(2) #include iostream using namespace std; class MyClass{ int val; public: MyClass(int i){ val=i; coutinside constructor \n; } int getval(){return val;} ~MyClass() { coutDestructor\n;} }; MyClass MkBigger(MyClass a){ MyClass o(a.getval()*2); return o; } void display(MyClass ob) { coutob.getval()endl;} main(){ MyClass a(10); coutBefore calling display().\n; display(a); a=MkBigger(a); coutafter display returns.\n; } 分析输出结果! 为什么构造函数被调用2次?但析构函数被调用5次? 提示:注意拷贝构造函数 3.12 类的作用域和对象的生存期 1、类的作用域 类构成了一种特殊的作用域,称为类域。类域是指类定义时的一对花括号所括起来的范围,形式如下: class X{ //类域开始 …… }; //类域结束 类域范围内的成员可以互相访问,不受成员访问控制权限的限定,类外的函数则只能访问类的公有成员。 例:简单的类域示例 class X{ //X的类域开始了 int a,b; float c; public: int f1(int i) { int a,y; a=i; X::a=9; //X最外层{}所框定的范围就是X的类域 return a*a; } //同一类域中的函数和数据可以相互访问 void f2(int j) { //y=1; //错误,y未定义,y只在f1内有效 b=f1(j); a=j+b; } }; //X的类域结束了,在后面就只能访问X的公有成员了 X n,*p; n.f1(2); //正确,在类域外访问类的公有成员 n.a=2; //错误,在类域外不能访问类的私有成员 p-f1(3); 2、对象的生存期 静态生存期和动态生存期 静态生存期是指对象具有与程序运行期相同的生存期,这类对象一旦被建立后,它将一直存在,直到程序运行结束时才被销毁。 动态生存期是指局部对象的生存期,局部对象具有块作用域,它的生存期是从它的定义位置开始,遇到离它最近的“}”就结束了。 对象的生存期是指对象从它被创建开始到被销毁之间的时间。 全局对象和静态对象具有静态生存期。 3.12 类的作用域和对象的生存期 3、各种对象的构造与析构 局部对象 声明期局限于定义它的语句块 程序执行到其定义处构造 语句块结束时析构 全局对象 生命期与程序相同 全局对象在调用main()之前构造 全局对象在调用main()之后析构 不同文件定义的全局对象,其构造顺序不定 3.12 类的作用域和对象的生存期 成员对象 生命期与包含它的对象基本相同 成员的构造先于包含它的对象 成员的析构晚于包含它的对象 多个成员对象的构造顺序与声明顺序相同 成员不存在默认构造函数时,要用初始化列表进行构造 3.12 类的作用域和对象的生存期 全局静态对象 生命期与程序相同 全局对象在调用main()之前构造 全局对象在调用main()之后析构 不同文件定义的全局静态对象,其构造顺序不定 局部静态对象 程序第一次执行到其定义代码处构造 调用main()之后析构 局部静态对象仅构造一次 3.12 类的作用域和对象的生存期 全局静态对象 生命期与程序相同 全局对象在调用main()之前构造 全局对象在调用main()之后析构 不同文件定义的全局静态对象,其构造顺序不定 局部静态对象 程序第一次执行到其定义代码处构造 调用main()之后析构 局部静态对象仅构造一次 3.12 类的作用域和对象的生存期 【例3-21】 对象的生存期。 //Eg3-21.cpp #include iostream using namespace std; class X{ public: X(int ii = 1){ i=ii; cout X ( ii ) created endl;} ~X(){ cout X ( i ) destroyed endl; }
文档评论(0)