C++中运算符重载

运算符重载使得用户自定义的数据以一种更简洁的方式工作。
比如
Int x,y; 可以为y=x+y;而 My c1,c2;如果想使得两个自定义的对象相加,以前只能调
用函数计算它们的和。而现在只要定义了运算符重载就能实现c1=c1+c2.
所谓重载,就是重新赋予新的含义。函数重载就是对一个已有的函数赋予新的含义,
使之实现新功能,因此,一个函数名就可以用来代表不同功能的函数,也就是“一名多
用”。
运算符也可以重载。实际上,我们已经在不知不觉之中使用了运算符重载。例如,大家
都已习惯于用加法运算符”+”对整数、单精度数和双精度数进行加法运算,如 5+8, 5.8
+3.67等,其实计算机对整数、单精度数和双精度数的加法操作过程是很不相同的, 但
由于 C++
已经对运算符”+”进行了重载,所以就能适用于 int, float, doUble 类型的运算。

运算符重载的本质是一个函数
例如

class Complex
{
public:
int a;
int b;
friend Complex operator+(Complex &c1, Complex &c2);
public:
Complex(int a=0, int b=0)
{
this->a = a;
this->b = b;
}
public:
void printCom()
{
cout<<a<<" + "<<b<<"i "<<endl;
}
private:
};
/*
Complex myAdd(Complex &c1, Complex &c2)
{
Complex tmp(c1.a+ c2.a, c1.b + c2.b);
return tmp;
}
*/
Complex operator+(Complex &c1, Complex &c2)
{
Complex tmp(c1.a+ c2.a, c1.b + c2.b);
return tmp;
}
void main()
{
Complex c1(1, 2), c2(3, 4);
//Complex c3 = c1 + c2; //用户自定义类型 编译器无法让变量相加
//Complex myAdd(Complex &c1, Complex &c2);
//1 普通函数
//Complex c3 = myAdd(c1, c2);
//c3.printCom();
//2 operator+ 函数名称
//Complex c3 = operator+(c1, c2);
//c3.printCom();
//3 +替换 函数名
Complex c3 = c1 + c2; 
c3.printCom();
{
int a =0, b = 0, c; 
c = a +b;
}
//4 把 Complex 类变成私有属性
//友元函数的应用场景
//friend Complex operator+(Complex &c1, Complex &c2);
cout<<"hello..."<<endl;
system("pause");
return ;
}

猜你喜欢

转载自blog.csdn.net/weixin_43778462/article/details/90633872