- 1、本文档共36页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
程序设计c第五章
C++ 程序设计语言第五章 多态性多态性:不同对象接收到相同消息,产生不同的行为多态性是面向对象程序设计的重要特征之一。多态性机制增加了面向对象软件系统的灵活性,减少冗余,提高软件的可重用性和可扩充性编译时的多态性与运行时的多态性C++中的多态性的实现和联编(绑定)有关C++源代码.cpp 目标文件.obj可执行文件.exe目标文件.obj链接运行编译目标文件.obj动态绑定或后期绑定静态联编(绑定)或前期绑定动态绑定:系统在运行时才知道调用那个函数。灵活性,问题抽象性,易维护性。静态绑定:系统在编译时就知道函数的全部信息。速度快,效率高动态绑定支持的多态性,叫运行时多态,或动态多态性静态绑定支持的多态性,叫编译时多态,或静态多态性函数重载(含运算符重载)、模板虚函数5.2 运算符重载运算符重载通过创建运算符重载函数来实现运算符重载函数类外普通函数类的成员函数友元函数运算符重载函数之一---类外定义运算符重载函数C++提供了许多预定义的运算符 + -*/ =等 int x, y ,z; x=2;y=x-1; z=x+y;但是class Complex{public: Complex(double r=0,double i=0) {real=r;imag=I;}private: double real;double imag;};Complex com1(1,2),com2(3,4);total=com1+com2;错误咋办呢??运算符重载函数功能 operator+ operator- operator* operator/…..加减乘除…..咋实现运算符重载泥??定义运算符重载函数运算符重载规则:1、.成员访问运算符、 .*成员指针访问符、 ::域访问运算符、 sizeof 长度运算符、 ?:条件运算符不能重载2、只能对已有运算符重载,不能定义新的运算符3、根据实际需要,尽量与原功能相似4、重载不会改变运算符优先级,不改变结合特性5、重载函数参数,至少有一个是对象或对象引用。不能都是基本数据类型6、运算符重载函数可以是普通函数、成员函数、友元函数7、数据成员包含指针成员时,需要用户编写赋值运算符重载函数,否则不需要用户定义函数格式: 返回类型 operator@(对象参数列表)#includeiostreamusing namespace std;class Complex{public: Complex(double r=0,double i=0) {real=r;imag=i;} void show(){coutreal+iimagendl;}public: double real;double imag;};Complex operator+(Complex om1,Complex om2){ Complex temp; temp.real=om1.real+om2.real; temp.imag=om1.imag+om2.imag; return temp;}int main(){ Complex com1(1,2),com2(3,4),total; total=com1+com2; total.show(); return 0;}运算符重载函数之二---友元 运算符重载函数普通函数只能访问公有成员,私有和保护成员咋办呢?一:定义成员运算符重载函数二:定义友元运算符重载函数友元运算符重载函数定义语法形式类内 定义friend 函数类型 operator运算符(形参表){函数体}类内声明,类外定义friend 函数类型 operator运算符(形参表) 类内声明函数类型 operator运算符(形参表) { 函数体 } 类外定义#includeiostreamusing namespace std;class Complex{public: Complex(double r=0,double i=0) {real=r;imag=i;} void show(){coutreal+iimagendl;} friend Complex operator+(Complex ,Complex );private: double real;double imag;};Complex operator+(Complex om1,Complex om2){ Complex temp; temp.real=om1.real+om2.real; temp.imag=om1.imag+om2.imag; return temp;}int main(){ Complex com1(1,2),com2(3,4),total; total=com1+com2; (operator+(com1,com2)
文档评论(0)