《C++程序设计》课程教学课件(PPT讲稿)第10章 运算符重载

第10章运算符重载 10.1什么是运算符重载 10.2运算符重载的方法 10.3重载运算符的规则 10.4运算符重载函数作为类成员函数和友元函数 10.5重载双目运算符 10.6重载单目运算符 10.7重载流插入运算符和流提取运算符 10.8不同类型数据间的转换
第10章 运算符重载 10.1 什么是运算符重载 10.2 运算符重载的方法 10.3 重载运算符的规则 10.4 运算符重载函数作为类成员函数和友元函数 10.5 重载双目运算符 10.6 重载单目运算符 10.7 重载流插入运算符和流提取运算符 10.8 不同类型数据间的转换

10.1什么是运算符重载 函数重载就是对一个已有的函数赋予新的含义, 使之实现新功能 运算符重载就是给运算符赋予新的功能。 譬如,定义一个专门的函数,来实现用“+” 号进行两个复数的相加
10.1 什么是运算符重载 函数重载就是对一个已有的函数赋予新的含义, 使之实现新功能 运算符重载就是给运算符赋予新的功能。 譬如,定义一个专门的函数,来实现用“+” 号进行两个复数的相加

例10.1通过函数来实现复数相加。 #include using namespace std; 定义Complex类 class Complex public: 定义构造函数 Complex(){real-0;imag-0;) Complex(double r,double i) 构造函数重载 {real=r;imag-i;} Complex complex add(Complex &c2); void display()左 声明复数 相加函数 private: 声明输出函数 double real; double imag;
例10.1 通过函数来实现复数相加。 #include using namespace std; class Complex {public: Complex( ){real=0;imag=0;} Complex(double r,double i) {real=r;imag=i;} Complex complex_add(Complex &c2); void display( ); private: double real; double imag; }; 定义Complex类 定义构造函数 构造函数重载 声明复数 相加函数 声明输出函数

Complex Complex:complex add(Complex &c2) {Complex c; c.real-=real+c2.real; 运行结果如下: c.imag-=imag+c2.imag; c1=(3+4i) return c; c2=(5-10i) c1+c2=(8,-6i) void Complex:display() {cout<<"("<<real<<","<<imag<<"i)"<<endl;} int main() 定义3个复数对象 {Complex c1(3,4),c2(5,-10),c3; c3=c1.complex add(c2); 调用复数相加函数 cout<<"cl=",cl.display())方 cout<<"c2-"c2.display(), 输出cl、c2、c3的值 cout<<"c1+c2=";c3.display() return 0;
Complex Complex∷complex_add(Complex &c2) {Complex c; c.real=real+c2.real; c.imag=imag+c2.imag; return c; } void Complex∷display( ) {cout<<″(″<<real<<″,″<<imag<<″i)″<<endl;} int main( ) {Complex c1(3,4),c2(5,-10),c3; c3=c1.complex_add(c2); cout<<″c1=″; c1.display( ); cout<<″c2=″; c2.display( ); cout<<″c1+c2=″; c3.display( ); return 0; } 运行结果如下: c1=(3+4i) c2=(5-10i) c1+c2=(8,-6i) 定义3个复数对象 调用复数相加函数 输出c1、c2、c3的值

例1:一个日期类对象加上若干天数,应该仍 是日期 Date d1(2001,12,1): 即运算:d1=d1+10;是合理的 应能得到:2001/12/11 8 C++的语法问题:“+”运算的操作数是什么? 定义了对内部 int “十 数据类型进行算术运算 char float、double
例1:一个日期类对象加上若干天数,应该仍 是日期 Date d1(2001,12,1); 即运算: d1=d1+10; 是合理的 C++的语法问题: “+”运算的操作数是什么? “+” int char float、double 数据类型进行算术运算 定义了对内部 应能得到:2001/12/11

例2:字符串相加操作 Char a[1o]=“Hello “ Char b[10]="World"; Char c[20]=a+b; 通过运算符重载实现 对象的运算操作: 严重的语法问题: 1.运用类机制 1.类型不一致; 2.a+b无意义 2.重载运算符 3. “十”不作串连接运 3.保持运算符概念上 倍 的一致性
例2:字符串相加操作 Char a[10]=“Hello “; Char b[10]=“World”; Char c[20]=a+b; 严重的语法问题: 1. 类型不一致; 2. a+b无意义 3. “+”不作串连接运 算 通过运算符重载实现 对象的运算操作: 1. 运用类机制 2. 重载运算符 3. 保持运算符概念上 的一致性

10.2运算符重载的方法 定义一个重载运算符的函数 运算符重载的方法是 在需要执行被重载的运算符 时,系统就自动调用该函数 运算符重载实质上是函数的重载 重载运算符的函数一般格式如下: type class_name::operator @(type op_data) 运算后的 运算符函数 被重载的 运算符的另一 返回值 所属的类 运算符 操作数和类型 Complex类(复数)的加法运算,函数的原型 双目运算符 Complex operator+(Complex&c1); 带一个参数, 单目运算符 不带参数
10.2 运算符重载的方法 运算符重载的方法是 运算符重载实质上是函数的重载 重载运算符的函数一般格式如下: Complex类(复数)的加法运算,函数的原型 Complex operator+ (Complex& c1); 定义一个重载运算符的函数 在需要执行被重载的运算符 时,系统就自动调用该函数 type class_name::operator @(type op_data) 被重载的 运算符 运算符的另一 操作数和类型 运算符函数 所属的类 运算后的 返回值 双目运算符 带一个参数, 单目运算符 不带参数

定义重载运算符的函数后,函数operator+重载了运算符+ #include 例10.1程序的基础上 using namespace std; 重载运算符“+”, class Complex 使之用于复数相加。 public: Complex Complex()real-0;imag-0; Complex:operator+ Complex(double r,double i) (Complex &c2) freal=r;imag-i;} Complex c; Complex operator+(Complex &c2) c.real=real+c2.real; void display()月 c.imag-imag+c2.imag; private: return c; double real; double imag; 定义重载运 算符的函数
定义重载运算符的函数后,函数operator+重载了运算符+ 例10.1程序的基础上 重载运算符“+” , 使之用于复数相加。 #include using namespace std; class Complex {public: Complex( ){real=0;imag=0;} Complex(double r,double i) {real=r;imag=i;} Complex operator+(Complex &c2); void display( ); private: double real; double imag; }; Complex Complex∷operator+ (Complex &c2) { Complex c; c.real=real+c2.real; c.imag=imag+c2.imag; return c; } 定义重载运 算符的函数

void Complex:display() {cout<<"("<<real<<"," <<imag<<"i)"<<endl; 运算符+用于复数运算 int main() {Complex c1(3,4),c2(5,-10),c3: c3=c1+c2; 运行结果: cout<<"c1=";c1.display(); c1=(3+4i) cout<<"c2=";c2.display() c2=(5-10i) cout<<"c1+c2=";c3.display() c1+c2=(8,-6i return 0;
void Complex∷display( ) { cout<<″(″<<real<<″,″ <<imag<<″i)″<<endl; } int main( ) { Complex c1(3,4),c2(5,-10),c3; c3=c1+c2; cout<<″c1=″;c1.display( ); cout<<″c2=″;c2.display( ); cout<<″c1+c2=″;c3.display( ); return 0; } 运行结果: c1=(3+4i) c2=(5-10i) c1+c2=(8,-6i) 运算符+用于复数运算

比较例10.1和例10.2,两处不同: (1)在例10.2中operator+函数 +complex add函数 只是函数名不同,函数体和函数返回值的类型都是相同的 (2)在main函数中 c3=c1+c2;-c3=c1.complex add(c2); C++编译系统将程序中的表达式c1+c2解释为 c1.operator+(c2) 其中cl和c2是Complex类的对象 operator-+(Complex&c2)进行求值 得到两个复数之和
比较例10.1和例10.2,两处不同: 只是函数名不同,函数体和函数返回值的类型都是相同的 (2) 在main函数中 c3=c1+c2; c3=c1.complex_add(c2); C++编译系统将程序中的表达式c1+c2解释为 c1.operator+(c2) 其中c1和c2是Complex类的对象 (1) 在例10.2中 operator+函数 complex_add函数 operator+(Complex &c2) 进行求值 得到两个复数之和
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 《C++程序设计》课程教学课件(PPT讲稿)第6章 指针(2/2).ppt
- 《C++程序设计》课程教学课件(PPT讲稿)第6章 指针(1/2).ppt
- 《C++程序设计》课程教学课件(PPT讲稿)第5章 二维数组.ppt
- 《C++程序设计》课程教学课件(PPT讲稿)第5章 一维数组.ppt
- 《C++程序设计》课程教学课件(PPT讲稿)第4章 函数与预处理(2/2).ppt
- 《C++程序设计》课程教学课件(PPT讲稿)第4章 函数与预处理(1/2).ppt
- 《C++程序设计》课程教学课件(PPT讲稿)第3章 循环结构.ppt
- 《C++程序设计》课程教学课件(PPT讲稿)第3章 选择结构.ppt
- 《C++程序设计》课程教学课件(PPT讲稿)第3章 程序设计初步.ppt
- 《C++程序设计》课程教学课件(PPT讲稿)第2章 数据类型与表达式.ppt
- 《C++程序设计》课程教学课件(PPT讲稿)第1章 C++的初步知识.ppt
- 《C++程序设计》课程教学课件(PPT讲稿)总结.ppt
- 《网络安全基础》课程教学资源(书籍文献)Bulletproof SSL and TLS,Ivan Ristić,Understanding and Deploying SSL/TLS and PKI to Secure Servers and Web Applications.pdf
- 新疆大学:《网络安全基础》课程教学资源(实验指导)实验8 系统安全.doc
- 新疆大学:《网络安全基础》课程教学资源(习题解答)用户认证.pdf
- 新疆大学:《网络安全基础》课程教学资源(实验指导)实验7 网络安全架构(IP安全).doc
- 新疆大学:《网络安全基础》课程教学资源(实验指导)实验6 无线网络WLAN安全.docx
- 新疆大学:《网络安全基础》课程教学资源(实验指导)实验5 电子邮件安全PGP.doc
- 新疆大学:《网络安全基础》课程教学资源(实验指导)实验4 Web安全(SSL与HTTPS).docx
- 新疆大学:《网络安全基础》课程教学资源(实验指导)实验3 常用命令.doc
- 《C++程序设计》课程教学课件(PPT讲稿)第11章 类的继承.ppt
- 《C++程序设计》课程教学课件(PPT讲稿)第12章 多态性与虚函数.ppt
- 《C++程序设计》课程教学课件(PPT讲稿)第13章 输入输出流.ppt
- 《C++程序设计》课程教学课件(PPT讲稿)第9章 类和对象的进一步讨论.ppt
- 《动画设计与制作》课程教学课件(PPT讲稿)产品广告(实训).ppt
- 《动画设计与制作》课程教学课件(PPT讲稿)创建运动的水面(实训).ppt
- 《动画设计与制作》课程教学课件(PPT讲稿)动力.ppt
- 《动画设计与制作》课程教学课件(PPT讲稿)粒子系统.ppt
- 《动画设计与制作》课程教学课件(PPT讲稿)轨迹控制器(曲线编辑器).ppt
- 《动画设计与制作》课程教学资源(授课教案)3DSMAX2008讲义(1/7).doc
- 《动画设计与制作》课程教学资源(授课教案)3DSMAX2008讲义(2/7).doc
- 《动画设计与制作》课程教学资源(授课教案)3DSMAX2008讲义(3/7).doc
- 《动画设计与制作》课程教学资源(授课教案)3DSMAX2008讲义(4/7).doc
- 《动画设计与制作》课程教学资源(授课教案)3DSMAX2008讲义(5/7).doc
- 《动画设计与制作》课程教学资源(授课教案)3DSMAX2008讲义(6/7).doc
- 《动画设计与制作》课程教学资源(授课教案)3DSMAX2008讲义(7/7).doc
- 《动画设计与制作》课程教学课件(PPT讲稿)骨骼蒙皮动画2009A.ppt
- 《动画设计与制作》课程教学课件(PPT讲稿)骨骼蒙皮动画2009B2.ppt
- 《动画设计与制作》课程教学课件(PPT讲稿)第01章 3ds max基础知识.ppt
- 《动画设计与制作》课程教学课件(PPT讲稿)第02章 建模.ppt