C++-OOP3-static-copy-6.pptVIP

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C++-OOP3-static-copy-6.ppt

面向对象程序设计 C++ 对象数组 (4.3.1) [例6.0] 对象数组和普通数组的定义差别不大。 Point p[100]; p[0].show(); 也可以这样定义 String sa[3] = { String(Hello), String(C++), String(World) }; 调用构造函数不同 前者调用默认构造函数 后者调用指定的构造函数。 对象指针 (4.3.2) [例6.0] 对象指针和普通指针的定义和使用都差别不大。 String *ps, s; ps = s; ps-size(); 和普通指针一样,可以用对象指针来遍历数组。 更加常见的是使用 new 来动态申请空间。 String *ps = new String(World); cout ps-c_str() endl; delete ps; 记住在合适的时间将指针销毁 delete。 使用malloc/free 可以么? String的粘接【例6.1】 void splice(const String s); this指针(4.3.3) String String::splice(const String ); 函数参数传递方式 (4.4) 值传递:参数为对象时,将对象拷贝传递给函数 String splice (String t); 指针传递:将对象的地址传递给函数。 String splice (String *t); 引用传递:将对象的引用传递给函数,本质上和指针传递一样。 String splice (String t); 尽可能使用引用传递对象参数;对大对象,尤其要避免值传递方式。 如果对象是输入参数,使用const限定。 #函数如何返回对象 返回对象 —— 值copy传递 string max(const string s1, const string s2) { return (s1 s2)?s1:s2; } 返回对象引用 —— 返回对象本身 (参考p36) const string max(const string s1, const string s2) { return (s1 s2)?s1:s2; } 千万不要返回指向局部对象的引用/指针【构造例子测试】 静态数据成员 (5.1.2) 静态数据成员 (5.1.2) 静态成员函数 (5.1.3) 静态成员的使用 (5.1.4) 静态成员函数可内联的,也可在类外定义,在类外部定义时不要再使用static修饰符。 静态成员也遵循public/private/protected访问规则。 静态类成员(数据) 静态类成员:按类存储 普通数据成员:按对象存储 静态成员函数:不能访问普通成员,但可访问静态成员。 String 对象计数【例6.4】 跟踪String 对象个数。 构造函数 count ++ 析构函数 count -- { String s1, s2; // count = 2 String s3(s3); // count = 3 String *ps = new String(); // count = 4 delete ps; // count =3 } // count = 0 String 对象计数 String 对象计数 计数为何失败? 程序为何出错? 拷贝构造函数与String 对象计数 (4.2.6) 计数失败原因: 当按值传递对象时,C++自动产生一个对象的copy; 对象copy后来被销毁,但它不是通过我们提供的构造函数创建;所以没有被 count ++ 用一个对象来初始化另外一个对象时 C++自动生成一个构造函数(称为Copy拷贝构造函数)来生成对象COPY。 除非我们提供自己的拷贝构造函数 拷贝构造函数 (4.2.6) #何时需自定义拷贝构造函数? 浅拷贝和深拷贝 浅拷贝:如果简单地位COPY即可完成对象的COPY工作。 起码,成员中没有指针 深拷贝:如果简单的位COPY不能完全完成对象的COPY工作。 成员中存在指针,则属于深拷贝 String的COPY构造函数 深度拷贝 —— 把指针内容复制一份。[例6.4-2] #隐含的成员函数 C++会自动提供这些成员函数 默认构造函数:空函数 复制构造函数:位COPY 赋值操作符:位COPY 默认析构函数:空函数 如有必要,请提供自己的版本 作业6 编程:为Time类增加一个引用计数静态成员,并使用数组、指针等测试,观察指针的new操作与否对计数的影响。 编程:设计编写课程类,至少包括课程名、课时、学分和课程性质(是否必修),课程名为char *类型,并为其增加引用计数静态成员;试试看无COPY构造函数时,会不会出问题?试试看。                  * 西安交通大学 西

文档评论(0)

xinshengwencai + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:5311233133000002

1亿VIP精品文档

相关文档