C++ 类更多功能.pptVIP

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

第9章 类的更多功能 内容提要 对象的指针与引用 类的静态成员 复制构造函数 9.1 对象数组 对象数组:用类类型声明的数组。 class CStudent { …… } CStudent ban[80]; 对象数组的每个数组元素都是一个对象 创建每个对象ban[i](数组元素)时都会调用构造函数进行初始化 9.2 对象的指针与引用 对象比较大(包含很多数据)时,进行值传递要复制整个对象,耗时且占空间 有没有不复制整个对象的方法? 传递对象的地址和引用 9.2.1 对象的指针 声明类对象的指针变量(地址变量) CStudent* p=0; //什么含义? 将对象的地址保存到指针变量 CStudent s5; p = s5; //什么含义? 通过对象指针访问对象成员,用间接访问符- 【例】 9.2.2 对象的引用 复习:引用是一个变量的别名 int b = a; 引用作函数形参 void swap(int a, int b) 对象引用—对象的别名—作函数形参,有指针的优点,没有指针那么复杂,简单易用 void CStudent::compare(CStudent ss) { if (score ss.score) coutfirst score is higher: scoreendl; else coutsecond score is higher: scoreendl; } #include iostream using namespace std; #include “student.h” //包含类的定义 int main() { CStudent s1,s2; char na1[]= Zhang San; s1.input(10201,na1,75); char na2[]= Li Si; s2.input(10202,na2,85); pare(s2); return 0; } 9.3 this指针 this指针:成员函数在执行时都有隐含的this指针,指向调用该成员函数的对象 也可以显式地使用this指针 void CStudent::compare(CStudent ss) { if (score ss.score) …… } { if (this-score ss.score) …… } int main() { CStudent s1,s2; …… pare(s2); return 0;} 9.4 类的静态成员 静态成员初始化 【例】静态成员 9.4.2 静态成员函数 9.5 复制构造函数 普通变量复制:int a=10; int b=a; 类的对象复制: int main() { CStudent s1(10201, “Zhang San, 0); CStudent s3=s1; s3.display(); } 创建s1调用构造函数进行初始化, 创建新对象s2时怎么初始化(复制初始化)? 编译器提供默认的复制构造函数,将对象s1的数据成员(值)一个一个地复制到对象s2 自定义的复制构造函数 为什么需要定义自已的复制构造函数? 当类中包含数组、指针类型时,单纯复制的话,两个对象中的指针都指向同一段内存(相同地址)。 如s1和s2的name指向同一内存(Zhang San) 如果其中一个对象s1被消毁了,这时对象s1中指针所指向的内存也同样被消毁,但另一个对象s2不知道这种情况,这时就会出现问题。 类中添加一个复制构造函数,代替编译器提供的 复制构造函数形式: fun(const fun obj); 使用编译器的复制构造函数 int main( ) { CStudent s2(10202, Li Si, 90); //构造函数初始化 s2.display(); //显示10202 Li Si 90 CStudent s3=s1; //对象复制,调用复制构造函数 s3.display(); //显示10202 Li Si 90 s3.setname(Wang Wu); //修改新对象中名字 s3.display(); //显示10202 Wang Wu 90 s1.display(); //显示10202 Wang Wu 90 } 复制构造函数复制每一个数据成员 s3.number=s1.number;

文档评论(0)

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

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

1亿VIP精品文档

相关文档