- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第2章C面向对象基础﹝5﹞
构造函数的声明格式为: 类名::类名(形式参数表) 例如: Class Point { Public: Point(int xx, int yx); int x,y; } Point::Point(int xx, int yx) { x=xx; y=yy; } ⒉ 析构函数(destructor) 析构函数的功能是当对象被撤消时,释放该对象占用的资源。 不能直接调用析构函数,在对象消亡时,系统将自动调用析构函数,执行一些在对象撤消前必须执行的清理工作。 析构函数没有任何返回类型。 析构函数没有参数,必须是公有的(public ) 。 每个类只能有一个析构函数。若类中没有提供析构函数,系统会自动提供一个默认的析构函数。 析构函数的函数名为类名前加~。例如:~Point(); 构造函数与析构函数的调用次序 构造函数是在创建对象时,由系统自动调用,先创建的先调用。 析构函数与构造函数的调用顺序刚好相反,先构造的后析构。 详见【例2.5】 this指针 当通过对象引用本类的一个成员时,自动向类传递一个隐含(implicit )的参数,即this指针,它指向正在访问该类的对象的指针。 一个类有很多对象,它的成员是供所有该类的对象共有的,如何区别是哪个对象正在访问类成员, this指针就解决了这个问题。 Point::Point(int xx, int yx) { x=xx; y=yy; } 实际上是: 省略了this。 2.1.4 拷贝构造函数(copy constructor )(4) 构造函数是用于初始化对象的,有时需要将已有对象的信息拷贝到另一个对象中去。 有几种情况,类必须需要拷贝构造函数: ⒈ 对象间用赋值(Assignment )语句,即: 对象1=对象2;这样语句。 ⒉ 对象作为函数参数传递时,需要拷贝构造函数。 ⒊ 用已有的对象构造新的对象时,需要拷贝构造函数。 例如:Testcat程序,用c1初始化c2,c2的数据成员完全由c1复制而来。 拷贝构造函数的显著特点是其参数是对向的引用。 语法: 原型说明:类名(const 类名); 函数实现:类名(const 类名 参数名) { 函数内容; } 函数调用:新对象名(已有对象名); The type of the copy constructors argument should be const class-name whenever possible. This prevents the copy constructor from accidentally changing the object from which it is copying. It also allows copying from const objects. 例如:Cat类。 原型说明:Cat(const Cat); 函数实现:Cat::Cat(const Cat ARs){age=ARs.age;} 函数调用:c2(c1);c3=c1; 借东西,好借好还。 程序向系统申请内存等资源,用完了同样也要归还。 即new与delete必须配对出现。 当类含有指针,并用new分配内存时,当需要将一个对象信息复制到另一个对象时,必须用拷贝构造函数,并且在拷贝构造函数中不能只简地单复制指针,而且要复制指针所指的内存,这需要用new为新对象分配内存,然后将已有对象的指针所指区域内容复制的新的对象中去。这就是深拷贝。 否则会出现例2.6的错误。 错误原因:两个对象有两个指针,都指向同一个内存,对象消亡时,两个对象的析构函数都通过各自的指针delete同一内存,造成同一内存被删除两次。 2.1.5 内联函数() 复习上次可内容。 2.1.6 函数重载(Overloading) 允许函数名相同,但是函数的参数表不同。函数调用时,C++根据函数参数表自动选择合适的函数。 重载函数,必须有不同的参数表(argument lists )。 例如: int Test(int aa)和float Test(float aa) 参数表相同,只有返回类型不同,会出错,不能编译。 例如: int Test()和float Test()不是重载函数。 例2.9中Test有三种参数表,调用时,C++根据参数表选择正确的Test函数。 可用F10和F11功能键跟踪观察。 2.1.7 静态成员变量和静态成员函数 ⒈ 静态成员变量(static member data) 一个类可以有很多对象,当类有一个所有对象都要共同维
您可能关注的文档
最近下载
- (建筑工程管理)砌砖及基础工程技术交底.pdf VIP
- DB11∕T 1748-2020 物体表面新型冠状病毒样本采集技术规范.pdf
- 三年级劳动技术浙教版下册:任务二 煮鸡蛋 蒸馒头-教学课件.pptx
- (高清版)-B-T 34590.10-2022 道路车辆 功能安全 第10部分:指南.pdf VIP
- 人教版二年级上册数学全册教学设计(配2025年秋新版教材).docx
- 江苏省建筑工程施工质量验收资料 .docx
- 2025新修订《监察法实施条例》培训课件.pptx VIP
- NB∕T 25043.6-2016 核电厂常规岛及辅助配套设施建设施工技术规范 第6部分:管道.pdf
- 2025年四年级上册数学口算天天练100题.pdf VIP
- 《小篮球多种形式的抛接球游戏》第一课时教学设计.pdf VIP
文档评论(0)