类与构造函数.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文档。上传文档
查看更多
另类“拷贝构造函数”-赋值函数 1、赋值函数是赋值运算符的重载函数,系统会默认一个赋值函数。 2、同拷贝构造函数相同,赋值函数也是位操作。 3、拷贝构造函数和赋值函数非常容易混淆,常导致错写,错用,拷贝构造函数是在对象被创建时调用的而赋值函数只能被已经存在了的对象调用。拷贝构造函数形式唯一(只能重写),赋值函数形式多样(可重载) class String { public: String(const char *str = NULL); // 普通构造函数 String(const String other); // 拷贝构造函数 String operate =(const String other); // 默认的赋值函数原型 ~ String(void); // 析构函数 private: char *m_data; // 用于保存字符串 }; 赋值函数内部示例 String String::operate =(const String other) { // (1) 检查自赋值 //1、没有人直接自赋值,但可能出现间接赋值。 //2、因为第二部释放当前实例的数据内存,如果两实例为同一实例将无法进行第三步的赋值。 if(this == other) return *this; // (2) 释放原有的内存资源 ,防止数据覆盖或产生脏数据 delete [] m_data; // 3 分配新的内存资源 并复制内容 ,执行复制 int length = strlen(other.m_data); m_data = new char[length+1]; strcpy(m_data, other.m_data); // 4 返回本对象的引用,有返回值是为了实现连等赋值。如a=b=c,不能返回other,因为对当前实例而言,other生命周期未知。 return *this; } 总结 类的声名 class A { private: int m_iAge; int GetAge(); protected: Char m_cName[50]; Void SetName(char* _pcName, int _iLen); public: int m_iWeight; int GetWeight(); A(); //构造函数 ~A(); //析构函数 A(const A _aOther); //缺省拷贝构造函数 A operate =(const A _aOther); // 缺省赋值函数 }; 赋值函数:默认按成员赋值 作用:更新同类型对象非静态数据成员 格式:返回值当前实例对象,重载=号运算符,可以重载,参数为源类对象的const 引用。 功能:自动被调用,用已有类对象的数据成员值“改写”目标类对象的非静态数据成员值。 。 析构函数 不同存储类型的对象调用构造函数及析构函数 1、对于全局定义的对象(在函数外定义的对象),在程序开始执行时,调用构造函数;到程序结束时,调用析构函数。 2、对于局部定义的对象(在函数内定义的对象),当程序执行到定义对象的地方时,调用构造函数;在退出对象的作用域时,调用析构函数。 3、用static定义的局部对象,在首次到达对象的定义时调用构造函数;到程序结束时,调用析构函数 4、对于用new运算符动态生成的对象,在产生对象时调用构造函数,只有使用delete运算符来释放对象时,才调用析构函数。若不使用delete来撤消动态生成的对象,程序结束时,对象仍存在,并占用相应的存储空间,即系统不能自动地调用析构函数来撤消动态生成的对象。 缺省的析构函数 若在类的定义中没有显式地定义析构函数时,则编译器自动地产生一个缺省的析构函数,其格式为: ClassName::~ClassName() { }; 任何对象都必须有构造函数和析构函数,但在撤消对象时,要释放对象的数据成员用new运算符分配的动态空间时,必须显式地定义析构函数。 构造函数: 作用:初始化资源 格式:无返回值,与类同名,可以重载。 功能:完成实例对象的资源申请和初始化(动态分配或局部类对象在缺省构造函数下其成员不会被自动初始化,这就要求我们编写自己的构造函数)。 拷贝构造函数:缺省按成员初始化 作用:初始化同类型对象 格式:无返回值,与类同名,可重写,参数为源类对象的const 引用。 功能:自动被调用,用已有类对象的数据成员值“初始化”目标

文档评论(0)

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

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

1亿VIP精品文档

相关文档