第18章 运算重载.pptVIP

  1. 1、本文档共44页,可阅读全部内容。
  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文档。上传文档
查看更多
第18章 运算重载

* 例: void fun(INTEGER arg) { INTEGER obj1=INTEGER(1); INTEGER obj2=“ChengDu”; int anint=10; INTEGER obj3=INTEGER(anint); obj1=20; //obj1=(INTEGER(20)); obj2.mem_fun(3); //obj2.mem_fun(INTEGER(3)); } * INTEGER obj1= INTEGER(1);将1转换为类类型 INTEGER obj2=“ChengDu”; 编译尝试用构造函数X(const char*,int=0)对赋值号右边的字符串进行类类型转换,转换成功后,赋给INTEGER的对象obj2。 语句obj2.mem_fun(3);中函数mem_fun由于需要一个INTEGER的对象作为参数,故尝试用构造函数对实参进行转换,转换成功后,进行虚实参数匹配,执行函数调用。这样的转换是系统自动做的,称为隐式类型转换。 * 构造函数INTEGER(int)将整数类型转换为类类型INTEGER; 构造函数INTEGER(const char *,int=0)将字符串转换为类类型INTEGER. 当INTEGER的构造函数不进行这个转换时,该转换失败。亦即,系统不再作其他转换的尝试。 * 例如: class X { … public: X(int); … }; class Y { … public: Y(X); … }; void main( ) { X objX=1; Y objY=objX; Y a=1; //错误 … } 类Y没有构造函数Y(int),因此不进行转换,但系统不会再去试试转换Y(X(1))。 * * 运算符重载应用 以下运算符经常需要重载: 算术运算符 关系运算符 逻辑运算符 赋值运算符 下标运算符 函数调用运算符 如果某个类包含有指向动态堆内存的指针数据成员,则一定要为该类定义一个赋值运算符重载函数(为什么?) * 重载赋值运算符“=” 作为类成员重载赋值运算,若对象内部数据不包括指针,则可采用浅复制方式,直接修改当前对象并把当前对象当作返回结果。 COMPLEX COMPLEX::operator =(const COMPLEX other) {   real=other.real; //相当于this-real=other.real   image=other.image; //相当于this-image=other.image   return *this; } 运算符重载应用 *   系统会提供缺省的赋值运算符,采用浅复制完成数据复制 若对象数据成员包含指针,就必须考虑重载赋值运算。 声明一个对象时作初始化也采用运算符“=”,但此时采用的是拷贝构造函数而不是调用重载赋值运算符。 课本[程序6-5]:如果某个类包含有指向动态堆内存的指针数据成员,则一定要为该类定义一个赋值运算符重载函数 class CString { private: char *p_str; //含指针的数据成员 public: CString(const char *p_s); CString(const CString r_s); ~CString(); const char * show() const; void operator += (const CString r_s); bool operator == (const CString r_s) const; CString operator = (const CString r_s); }; CString CString::operator = (const CString r_s) { if (this == r_s) return *this; delete p_str; p_str = new char[strlen(r_s.p_str)+1]; if (p_str == NULL) exit(1); strcpy(p_str, r_s.p_str); cou

文档评论(0)

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

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

1亿VIP精品文档

相关文档