第2章C++面向对象基础﹝5﹞.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文档。上传文档
查看更多
第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) 一个类可以有很多对象,当类有一个所有对象都要共同维

文档评论(0)

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

分享好文档!

1亿VIP精品文档

相关文档