[C++ ] 6 运算符的重载
在我们学习之前首先要明白为什么编译系统已经有运算符了我们还需要重载运算符?
编译系统中存在的运算符只能对编译系统内的基础数据类型进行运算,比如int,float,double等…假如我有一个类
Class CNumber
{
int m_nInt;
float m_fFloat;
double m_lfDouble;
}
假如该类有2个对象num1和num2,我想要实现类里面的对应属性相加,我又想用num1+num2这种形式,那么编译系统自带 + 是否能正确的用?显然是不能的,我们需要对编译系统的 + 进行重载,下面具体实现
//------------------------------------------------ 分割线(Number.h)------------------------------------------------
首先搞定类 Number.h
#include <iostream>
using namespace std;
class CNumber
{
public :
CNumber();//无参构造函数
CNumber(int a,float b,double c);//带参构造函数
CNumber operator +(const CNumber &obj);//重载加法运算符
void show();//打印信息
~CNumber();//析构函数
private :
int m_nInt;
float m_fFloat;
double m_lfDouble;
};
//------------------------------------------------ 分割线(Number.cpp)------------------------------------------------
然后实现类中的方法 Number.cpp
#include "Number.h"
//无参构造函数
CNumber::CNumber()
{
}
//带参构造函数
CNumber ::CNumber(int a,float b,double c)
{
m_nInt=a;
m_fFloat=b;
m_lfDouble=c;
}
//加法运算符重载
CNumber CNumber::operator +(const CNumber &obj)
{
this->m_nInt+=obj.m_nInt;
this->m_fFloat+=obj.m_fFloat;
this->m_lfDouble+=obj.m_lfDouble;
return *this;
}
//打印信息
void CNumber::show()
{
cout<<"m_nInt = "<<m_nInt<<endl;
cout<<"m_fFloat = "<<m_fFloat<<endl;
cout<<"m_lfDouble = "<<m_lfDouble<<endl;
}
//析构函数
CNumber::~CNumber()
{
}
//------------------------------------------------ 分割线(test.cpp)------------------------------------------------
最后我们调用刚才的类测试一下结果 test.cpp
#include "Number.h"
int main()
{
//定义两个对象num1,num2
CNumber num1(2,2.4f,1.2);
CNumber num2(3,2.6f,3.8);
//将两个对象相加的结果输出
(num1+num2).show();
return 0;
}
PS:
1,运算符的重载不能违背运算符原由的结合性,优先级等性质
2,. :: ?: sizeof等不建议重载

浙公网安备 33010602011771号