运算符重载的基本概念

1.) 运算符重载的需求

  •  C++预定义的运算符,只能用于基本数据类型的运算:整型、实型、字符型、逻辑型。但是,不能对复数对象进行运算。所以此时引出运算符重载。                                        
  • 有时候会希望,让对象也能通过运算符进行运算。这样代码更简洁,容易理解。                                                                                                                                                                                                                                                                             例如:complex_a和complex_b是两个复数对象;求两个复数的和,希望能直接写:           complex_a+complex_b.  

                                                                                                                                                    2.)  运算符重载                                             

  • 运算符重载,就是对已有的运算符(C++中预定义的运算符)赋予多重的含义,使同一运算符作用于不同类型的数据时导致不同类型的行为。
  • 运算符重载的目的是:扩展C++中提供的运算符的适用范围,使其能作用于对象。
  • 同一个运算符,对于不同类型的操作数,所发生的行为不同。                                                                                                           例如:complex_a + complex_b   生成新的复数对象  

3.) 运算符重载的形式        

  • 运算符重载的实质是函数重载。
  • 可以重载为普通函数,也可以重载为成员函数。
  • 把含运算符的表达式转化成对运算符函数的调用。
  • 把 运算符的操作数转化成运算符函数的参数。
  • 运算符被多次重载时,根据实参的类型决定调用哪个运算符函数。

4.) 运算符重载的形式

返回值类型  operator运算符(形参表)                                   (函数名:operator运算符)

{

......

}

5.) 运算符重载示例

重载为成员函数时,参数个数为运算符目数减一。

重载为普通函数时,参数个数为运算符目数

代码如下:

//运算符重载示例
#include<iostream>
using namespace std;
class Complex
{
   public:
   	double real,imag;
   	Complex(double i=0.0,double j=0.0):real(i),imag(j){ }
   	Complex operator- (const Complex& c);
};

Complex Complex::operator- (const Complex& c)//重载为成员函数时,参数个数为运算符目数减一
{
	return Complex(real-c.real,imag-c.imag);//返回一个临时对象
}

Complex operator+ (const Complex& a,const Complex& b)//重载为普通函数时,参数个数为运算符目数
{
   return Complex(a.real+b.real,a.imag+b.imag);//返回一个临时对象
}

int main(void)
{
    Complex a(1,7),b(2,3),c;
    c=a+b;//等价于c=operator+(a,b);
    cout<<c.real<<","<<c.imag<<endl;
    c=a-b;
    cout<<c.real<<","<<c.imag<<endl;
	return 0;
}

结果:

3,10
-1,4

  c=a+b;等价于c=operator+(a,b);

  a-b  等价于a.operator-(b).                                                                                                                                                                                                                                                                                                                                                                                                                                    

扫描二维码关注公众号,回复: 9033485 查看本文章
发布了30 篇原创文章 · 获赞 6 · 访问量 994

猜你喜欢

转载自blog.csdn.net/weixin_43677405/article/details/100081868
今日推荐