运算符重载格式:
返回类型(空格)operator(要重载的运算符)(这里是个简单的括号)(里面放入形式参数)
理解:
运算符的重载,在本质上来讲是对特殊情况下的运算符进行一个重新定义
例子:
#include<iostream>
using namespace std;
class com{ //定义一个类,有实数和虚数
public:
double real;
double imag;
com(double a,double b);
com()
{
this->imag=0;
this->real=0;
}
com operator+(com &test)
{
com now;
now.real=this->real+test.real;
now.imag=this->imag+test.imag;
return now;
}
};
com::com(double a,double b)
{
this->imag=a;
this->real=b;
}
int main()
{
com a1;
com a2(3,4);
cout<<"a2:"<<a2.imag<<" "<<a2.real<<endl;
com a3(5,6);
cout<<"a3:"<<a3.imag<<" "<<a3.real<<endl;
a1=a2+a3;
cout<<a1.real<<" "<<a1.imag<<endl;
return 0;
}
这一程序中运算符重载部分:
com operator+(com &test)
{
com now;
now.real=this->real+test.real;
now.imag=this->imag+test.imag;
return now;
}
目的是让声明的com类可以相加,并为其定义相加的法则。
这里不仅仅可以重载‘+’,‘-’等运算符,‘[]’也是可以的
什么场面我没见过 ,这场面我真的头一次见
例子:
#include <iostream>
#define MAX 10
using namespace std;
class ARRY
{
private:
int a[MAX];
public:
ARRY(int x)//给数组赋值
{
int i;
for(i=0;i<MAX;i++)
{
a[i]=x+i;
}
}
int& operator[](int i)//因为返回的是数组的地址,因此要用int&
{
if(i>MAX)
{
return a[0];
}
return a[i];
}
};
int main()
{
ARRY A(2);
cout<<A[2]<<endl;
cout<<A[3]<<endl;
cout<<A[100]<<endl;
return 0;
}
注意:
1.参与运算符重载的至少有一个类。
2.大多数的运算符是可以重载的,但::(域运算符),.*(成员指针运算符),sizeof,?:(条件运算符)(在网上查了一下才知道名字,捂脸.jpg)不可以重载。
3.重载运算符不会改变运算符的优先级和其结合性。
4.重载函数可以定义在类内,当然也可以定义为一个友元函数。
以上是个人的学习笔记,有不对的地方欢迎各位大佬指正。