- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十一讲 运算符重载和string类 第十一讲 运算符重载 运算符重载的概念 运算符重载的方式: 重载为类的成员函数 重载为类的友元函数 运算符重载的限制 string类 构造函数 成员函数 运算符 引例 案例分析 定义表示复数的类Complex,包括完成两个复数相加的成员函数Add。(cw1101) 引例 案例分析 续 引例 案例分析 续 运算符重载 运算符的重载与函数重载的方法一致,是一种特殊的函数重载。 在类中可以使用两种方法对运算符进行重载: 重载为类的成员函数 重载为类的友元函数 运算符重载 运算符重载为类的成员函数 语法格式 operator是关键字。 @是要被重载的运算符。 operator@共同组成该运算符函数的名称。 X是需要重载该运算符的类。 TYPE是该运算符函数的返回值类型。 运算符重载 案例分析:运算符重载为类的成员函数 在Complex类中定义重载运算符+的函数。(cw1102) 运算符重载 案例分析:运算符重载为类的成员函数 续 运算符重载 案例分析:运算符重载为类的成员函数 续 运算符重载 运算符重载为类的友元函数 语法格式 对于双目运算符,形参表中有两个参数。 对于单目运算符,形参表中有一个参数。 案例分析:运算符重载为类的友元函数 在Complex中定义友元函数重载运算符+。(cw1103) 运算符重载 案例分析:运算符重载为类的友元函数 续 运算符重载 运算符重载的限制 大部分C++运算符可以被重载,除了下面的运算符: “.”、“.*”、“::”、“?:”等 不能定义新的运算符。 例如,operator**()。 运算符的重载既不会改变原运算符的优先级和结合性,也不会改变使用运算符的语法和参数个数。 当重载为类的成员函数时,运算符重载函数的形参个数要比运算符操作数个数少一个;若重载为友元函数,则参数个数与操作数个数相同。 下面的运算符只能通过成员函数重载。 “=”、“()”、“[ ]”、“-” 运算符重载 运算符重载的限制 由于重载后的运算符函数经常需要访问类的私有成员,因此运算符函数operator@()通常被声明为类的成员函数或友元函数。其等价的函数调用形式,如表3.2所示。 常用的运算符重载 案例分析:重载 在Complex中重载,实现用cout直接输出Complex对象。(cw1104) 常用的运算符重载 案例分析:重载 续 string类 处理字符串的两种方法 使用string.h中声明的字符串处理函数。 包含头文件string.h或cstring 使用C++标准类库中的string类。 包含头文件string 封装了字符串数据,提供了字符串操作的成员函数。 string类 构造函数 成员函数 运算符 +、=、+=、==、!=、=、=、、、[ ]、、 小结 运算符重载的意义是使系统已有的运算符对用户自定义的数据类型进行操作。 运算符重载的实质就是函数重载。 在类中采用两种方法对运算符进行重载: 重载为类的成员函数 重载为类的友元函数 重载为类的成员函数时,引用对象本身是一个操作数,且在双目运算符的左边。 小结 几乎所有的C++运算符可以被重载,但是不能增加新的运算符,重载也不会改变运算符的优先级和结合性,也不会改变使用运算符的语法和参数个数。 C++的标准类库中提供了一个string类,定义了丰富的成员函数和运算符,用来对字符串进行操作。 2008年02月 张华 武汉大学 张 华 C++语言程序设计 运算符重载 #include iostream.h class Complex { private: double r; //实部 double i; //虚部 public: Complex(double x=0.0, double y=0.0) { r = x; i = y; } Complex Add(const Complex c); void Print(); }; 运算符重载 Complex Complex::Add(const Complex c) { Complex t; t.r = r + c.r; t.i = i + c.i; return t; } void Complex::Print() { cout(r, i)endl; } 运算符重载 void main() { Complex a(3.0, 4.0), b(10.5, 20.5), c; c = a.Add(b); c.Print(); } 能不能实现同样的功能,但写成:a+b 对运算符+进行重载,使得+可以用于用户自定义的类型。 运算符重载 运算符重载 TYPE X::oper
原创力文档


文档评论(0)