c 面向对象程序设计06 多态性.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6.5 运算符重载 * //类的实现:Complex.cpp #include?Complex.h Complex?Complex::add(Complex?c) { ????return?Complex(real+c.real,?image+c.image); } Complex?Complex::sub(Complex?c) { ????return?Complex(real-c.real,?image-c.image); } void?Complex::print() { ????if(image?0.0) ????????cout(realimagei)endl; ????else ????????cout(real+imagei)endl; } 例6-4(续) 6.5 运算符重载 * //主函数文档:main.cpp #include?complex.h #include?iostream using?namespace?std; int?main() { ????Complex?a(1.8,?-2.4),?b(4.3,?4.7); ????Complex?c?=?a.add(b); ????Complex?d?=?a.sub(b); ????c.print(); ????d.print(); ????return?0; } 例6-4(续) (6.1+2.3i) (-2.5-7.1i) (1)运算符重载的实质是函数重载,可以对大部分的运算符进行重载,这是C++的重要特点。C++编译器根据参数个数和类型来决定调用哪个函数重载,同一个运算符可以定义几个运算符重载函数来进行不同的操作。运算符重载返回类型可以是任意的,通常与操作数类型相同。 * 6.5.1运算符重载规则 6.5 运算符重载函数 (1) 只能针对C++中原有运算符进行重载,不能通过重载创造出新的运算符。 下列五个运算符不允许重载 . 成员访问运算符 .* 成员指针运算符 :: 作用域区分运算符 ? : 条件运算符 sizeof 测数据空间大小运算符 除此之外,C++的其他运算符都可以重载。 * 6.5.1运算符重载规则 6.5 运算符重载函数 6.5.1运算符重载规则(续) (2)重载后的运算符所做的操作要尽量保持原来的意义,否则会降低程序的可读性。 (3) C++中,用户不能定义新的运算符,只能重载已有的运算符重载。有六个运算符不能重载:成员访问运算符“.”,成员指针运算符“?”和“*”,作用域运算符“::”,sizeof运算符和三目运算符“?:”。 (4) 重载运算符与预定义运算符的使用方法完全相 同,它不能改变原来运算符的参数个数,也不能改变其的优先级。 * 6.5 运算符重载函数 6.5.2 运算符重载为成员函数 类中的成员函数总是通过该类的对象来访问的; 如果是双目运算符,左操作数一定是访问成员函数的对象本身,另一个操作数通过运算符重载函数的参数表来传递; 如果是单目运算符,操作数就是访问成员函数的对象本身,不需要再传递任何参数。 * 6.5 运算符重载函数 6.5 运算符重载 * 例6-6 复数类乘法运算重载为类的成员函数。 #include iostream using namespace std; class complex { private: //私有成员 double real, image; public: //公有接口 complex(double r=0.0, double i=0.0):real(r), image(i) { } ~complex() { } complex operator* (const complex c) const; complex operator* (const double c) const; void print()const; }; void complex::print() const { cout(real,image)endl; } * complex complex::operator*(const complex c) const { return complex(real*c.real-image*c.image, real*c.image+image*c.real); } complex complex::operator*(const double c) const { return complex(real*c, image*c); } int main() { complex c1(3,4), c2(7,8), c3; c3=c2*c1

您可能关注的文档

文档评论(0)

132****9295 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档