您的位置:首页 > 编程语言 > C语言/C++

菜鸟的C++学习笔记:运算符的重载

2019-04-03 10:42 155 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_43557177/article/details/88989925

运算符重载格式:

返回类型(空格)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.重载函数可以定义在类内,当然也可以定义为一个友元函数。

以上是个人的学习笔记,有不对的地方欢迎各位大佬指正。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: