●●● ●●●●● 第14讲运算符重载 ●●●● ●●● ● ●运算符重载的概念、方法和规则 ●运算符重载作为类的成员函数 ●运算符重载作为类的友元函数 ●特殊运算符的重载 ●类型转换函数
1 第14讲 运算符重载 ⚫ 运算符重载的概念、方法和规则 ⚫ 运算符重载作为类的成员函数 ⚫ 运算符重载作为类的友元函数 ⚫ 特殊运算符的重载 ⚫ 类型转换函数
●●● ●●●●● 学习目标 ●●●● ●●● ● ●理解运算符重载的含义和规则; ●掌握运算符重载作为类成员函数和友元函数的 方法; 掌握常用运算符的重载,了解十+和-等特殊运 算符的重载; 理解不同类型数据间转换的概念和方法
学习目标 ⚫ 理解运算符重载的含义和规则; ⚫ 掌握运算符重载作为类成员函数和友元函数的 方法; ⚫ 掌握常用运算符的重载,了解++和--等特殊运 算符的重载; ⚫ 理解不同类型数据间转换的概念和方法。 2
●●● ●●●●● 第14讲运算符重载 ●●●● ●●● ● ●运算符重载的概念、方法和规则 ●运算符重载作为类的成员函数 ●运算符重载作为类的友元函数 ●特殊运算符的重载 ●类型转换函数
3 第14讲 运算符重载 ⚫ 运算符重载的概念、方法和规则 ⚫ 运算符重载作为类的成员函数 ⚫ 运算符重载作为类的友元函数 ⚫ 特殊运算符的重载 ⚫ 类型转换函数
●●● ●●●●● 什么是运算符重载 ●●●● ●●● ● (一)什么是重载( Overloading)? 1、重载重新赋予新的含义 2、函数重载 3、运算符重载—为已有的运算符赋予多重含义。 int a,b,cr c=a+b: cout<<c double x,y, Z, z=Xty; cout<<Z, 同一运算符作用于不同类型的数据具有不同实现
什么是运算符重载 (一)什么是重载( Overloading )? 1、重载——重新赋予新的含义 2、函数重载 3、运算符重载——为已有的运算符赋予多重含义。 4 int a,b,c; c=a+b; cout<<c; double x,y,z; z=x+y; cout<<z; 同一运算符作用于不同类型的数据具有不同实现
●●● ●●●●● 什么是运算符重载 ●●●● ●●● ● int sum.a=3.b=2 sum=atb: (int )=(int)+(int 系统自动 识别数据 float add, x=3.2, y-2.5 类型 add=x+y;(float)(float)+(float) char sti[4],cl[2]="a",c2[2}="b"; str=cl+c2; ( char *(char *) char 编译系统中的运算符“+”本身不能做这种运算,若 使上式可以运算,必须重新定义“+”运算符,这种 重新定义的过程成为运算符的重载
什么是运算符重载 5 int sum,a=3,b=2; sum=a+b; (int)=(int) + (int) float add, x=3.2, y=2.5; add=x+y; (float)=(float) + (float) 系统自动 识别数据 类型 char str[4], c1[2]="a", c2[2]="b"; str=c1+c2; (char *)=(char *) + (char *) 编译系统中的运算符“+”本身不能做这种运算,若 使上式可以运算,必须重新定义“+”运算符,这种 重新定义的过程成为运算符的重载
●●● ●●●●● 运算符重载的作用 ●●●● ●●● ● class A 运算符重载就是赋予已有的运算符多重 float x, y;含义。C艹通过重新定义运算符,使它 public 能够用于特定类的对象执行特定的功能。 A(float a=0, float b=0 Xa; y=b;) void main(void) {Aa(2,3),b(3,4) c=atb 两对象不能使用十,必须重新定义 }通过重载可使该运算符能像操作基本数据 类型一样,来操作用户自定义的数据类型
运算符重载的作用 6 class A { float x,y; public: A(float a=0, float b=0){ x=a; y=b; } } void main(void) { A a(2,3), b(3,4), c; c=a+b; } 两对象不能使用+,必须重新定义+ 运算符重载就是赋予已有的运算符多重 含义。C++通过重新定义运算符,使它 能够用于特定类的对象执行特定的功能。 通过重载可使该运算符能像操作基本数据 类型一样,来操作用户自定义的数据类型
●●● ●●●●● 运算符重载的作用 ●●●● ●●● ● ●运算符的重载从另一个方面体现了面向对象编 程技术的多态性,即同一运算符根据不同的运 算对象可以完成不同的操作。 为了重载运算符,必须定义一个函数,并告诉 编译器,遇到这个重载运算符时就调用该函数 ,由这个函数来完成该运算符应该完成的操作 。这种函数称为运算符重载函数
运算符重载的作用 ⚫ 运算符的重载从另一个方面体现了面向对象编 程技术的多态性,即同一运算符根据不同的运 算对象可以完成不同的操作。 ⚫ 为了重载运算符,必须定义一个函数,并告诉 编译器,遇到这个重载运算符时就调用该函数 ,由这个函数来完成该运算符应该完成的操作 。这种函数称为运算符重载函数。 7
●●● ●●●●● 运算符重载的方法 ●●●● ●●● ● 1、通过定义一个重载运算符函数来实现。 2、重载运算符函数的一般格式 函数类型 operator运算符(形参列表) 运算符的重载处理} 3、举例 重载“十”,实现复数加法运算
运算符重载的方法 1、通过定义一个重载运算符函数来实现。 2、重载运算符函数的一般格式 函数类型 operator 运算符 ( 形参列表) { 运算符的重载处理 } 3、举例 重载“+”,实现复数加法运算 8
●●● ●●●●● 运算符重载的规则 ●●●● ●●● ● ●只能对已有的运算符进行重载。 ●大部分运算符都可以重载,以下五个除外: 水 sizeof ●运算符重载后,“三不变”。 ●即原运算符的操作数的个数、优先级和结合性 都不变。 ●其他规则。P219
运算符重载的规则 ⚫ 只能对已有的运算符进行重载。 ⚫ 大部分运算符都可以重载,以下五个除外: . .* :: sizeof ? : ⚫ 运算符重载后,“三不变”。 ⚫ 即原运算符的操作数的个数、优先级和结合性 都不变。 ⚫ 其他规则。P219 9
●●● ●●●●● 第14讲运算符重载 ●●●● ●●● ● ●运算符重载的概念、方法和规则 ●运算符重载作为类成员函数 ●运算符重载作为类的友元函数 ●特殊运算符的重载 ●类型转换函数
10 第14讲 运算符重载 ⚫ 运算符重载的概念、方法和规则 ⚫ 运算符重载作为类成员函数 ⚫ 运算符重载作为类的友元函数 ⚫ 特殊运算符的重载 ⚫ 类型转换函数