#include<iostream>
using namespace std;
/**
运算符重载,就是为运算符提供新的运算功能。这在java中是没有的。
运算符的重载实质上是函数的重载。
格式如下:
函数的返回类型 operator 运算符名称(形参列表);
这里的运算符名称一般是系统预定义的已有的名称。
比如要实现复数相加的功能函数,可以重载+
虽然重载运算符所实现的功能完全可以使用函数来实现,它本质上也是使用的函数来实现的,但是
使用函数运算符的特点是使得用户程序易与编写,阅读和维护
如何判断此时的运算符的功能呢?
是根据表达式的上下文决定的,运算符两侧的数据类型决定的。
重载运算符的规则:
1.C++不允许用户自定义定义新的运算符,只能对C++已有的运算符进行重载。
2.不允许重载的运算符有5个:
.
.*j
::
sizeof
?:
3.重载运算符的必须和用户自定义的对象一起使用。
4.应该使得重载运算符的功能类似与标准类型数据时所实现的功能
对于标准的数据类型转换,系统有它自己的规则,但是对于用户自己定义的数据类型,系统该如何将其转为
其他数据类型呢?
答案是使用转换构造函数
*/
//一个复数类
class Complex{
private :
double real;
double img;
public:
Complex(){
this->real = 0;
this->img = 0;
};
Complex(double real,double img){
this->real = real;
this->img = img;
}
//声明一个运算符重载函数
Complex operator +(Complex &c2);
void display();
friend ostream& operator <<(ostream& os,Complex& cp);
};
ostream& operator <<(ostream& output,Complex& c){
output << "(" << c.real << "+" << c.img << "i)";
return output;
}
//在类外定义重载运算符函数,函数名是operator +
Complex Complex :: operator +(Complex &c2){
Complex c;
c.real = this->real + c2.real;
c.img = this->img + c2.img;
return c;
};
void Complex::display(){
cout << this->real << "+" << this->img << +"i" << "\n";
}
int main(){
Complex c1(3,4), c2(5,6), c3;
//这里会调用Complex中定义好的重载运算符+
c3 = c1 + c2;
c1.display();
c2.display();
c3.display();
cout << c3;
return 0;
}
C++中的运算符重载
最新推荐文章于 2024-01-16 22:36:40 发布