C++程序设计教程 第10讲:运算符重载
C++程序设计教程 第10讲: 运算符重载/5
§8.2运算符重载 如何理解运算符的重载? 1。运算符本身是一种函数 加法是一种运算 如 a+ b 赋值也是一种运算 函数形式 int add(int aint b)[ return (a+b);) 调用方式:c=add(a,b); 再如 int a, b, zi 如果add(inta,intb) a t b t ci 没有返回值,则不能实现连 如用函数表示应该是: add(add(a,b)c)i
§8.2 运算符重载 如何理解运算符的重载? 1。运算符本身是一种函数。 如: c = a + b; 函数形式: int add(int a,int b) { return (a+b); } 调用方式: c = add(a,b); 加法是一种运算 赋值也是一种运算 再如: int a, b, c, z; z = a + b + c; 如用函数表示应该是: z = add(add(a,b),c); 如果 add(int a,int b) 没有返回值,则不能实现连 加!!
§8.2运算符重载 从函数角度来看,“重载”是函数名称相同而入口参数数 据类型不同的。 因此,cout<<a<<b;中的<运算符 和int=a<<2;中的<的运算符 同样的运算符但调用对象不同,就可称为重载。 对加法而言 int ia =1 ib =2: o int ic ia t ib; o float fa =1. 5f f =2. 5f: 。f1 oat fo=fa+fb; 这两者中的+如果看作函数的话,就是被重载了
§8.2 运算符重载 2。从函数角度来看,“重载”是函数名称相同而入口参数数 据类型不同的。 因此,cout << a << b; 中的 << 运算符 和 int c = a << 2; 中的 << 的运算符 同样的运算符但调用对象不同,就可称为重载。 对加法而言: int ia = 1, ib = 2; int ic = ia + ib; float fa = 1.5f, fb = 2.5f; float fc = fa + fb; 这两者中的 + 如果看作函数的话,就是被重载了
8.2.1运算符重载的规则 C++允许重载现有的大多数运算符,而且只重 载已经有的运算符; 运算符的重载是通过编写函数来实现的,重载 之后的运算符的优先级和结合性都不会改变; 运算符重载是针对新的数据类型(类),对运 算符进行定义。除了=和&,对象的运算符 必须重载,=和&也可重载; [注意] 合理使用运算符的重载,使调用者容易理解 赋值运算符(=)只是逐个拷贝类的数据成员, 这在很多情况下很危险
8.2.1 运算符重载的规则 1. C++允许重载现有的大多数运算符,而且只重 载已经有的运算符; 2. 运算符的重载是通过编写函数来实现的,重载 之后的运算符的优先级和结合性都不会改变; 3. 运算符重载是针对新的数据类型(类),对运 算符进行定义。除了 = 和 &,对象的运算符 必须重载,= 和 & 也可重载; [注意] 1. 合理使用运算符的重载,使调用者容易理解; 2. 赋值运算符( = ) 只是逐个拷贝类的数据成员, 这在很多情况下很危险
运算符重载例8-1 class comp1ex//复数类声明 I public //构造函数 complex(double r=0.0, double i=0.0) real=r; imag=ii y void display()//显示复数的值 I cout < ("< real <<m<< imag <<)"<<endl private: double reali double imag
运算符重载 例8-1 class complex //复数类声明 { public: //构造函数 complex(double r=0.0,double i=0.0) { real=r; imag=i; } void display() //显示复数的值 { cout << “(” << real << “,” << imag << “)” << endl; } private: double real; double imag; };