C++的运算符重载(一)运算符重载的定义及注意事项

  • 运算符重载(操作符重载)
    1、根据用户的需求,可以为运算符增加一些新的功能,赋予新的含义。例如加法,正常情况下只能两个数进行相加(a+b),现在想要将两个点进行相加( Point(10,10)+Point(20,20) )(在程序中有体现),此时就要为加法赋予新的功能
    2、运算符重载的格式
    在这里插入图片描述
    3、并不是所有的运算符都可以实现重载
    4、有些运算符只能重载为成员函数 ,例如=、[ ]、()、->
    5、运算符重载函数可以是类的成员函数,由于类的普通成员函数本身就有一个指向对象的指针this所以单目运算符不需要参数,双目运算符的参数只有一个。也可以是全局函数(一般需要在类中声明该函数为友元函数)
    6、运算符重载函数不能用默认参数,否则会改变运算操作符的个数
    7、运算符重载不会改变原来的运算符的用法(所以重载后的运算符最好和原来的运算符具有一样的性质)
    8、能用成员函数重载运算符尽量用成员函数,但是在某些情况下,只能使用友元函数重载运算符,例如:无法修改左操作数的类、ostream、istream、左操作数是普通成员变量等

在接下来的博客中将具体实现 +、- 、+=、=、==、!=、负号、++、<<、>>、前置++、后置++ 的重载

先简单的看下运算符重载程序(+、-、前置++、后置++)

class Complex{
private:
	int m_r,m_v;
public:
	Complex(int r,int v):m_r(r),m_v(v){}

	const Complex operator+(const Complex& c)const {
		int r=m_r+c.m_r;
		int v=m_v+c.m_v;
		static Complex temp(r,v);
		return temp;
	}

	const Complex operator-(const Complex& d)const{
		int r=m_r-d.m_r;
		int v=m_v-d.m_v;
		Complex temp(r,v);
		return temp;
	}

	//前置加加
	 Complex& operator++(){
		m_r++;
		m_v++;
		return *this;
	}

	//后置加加
	const Complex& operator++(int){
		Complex temp(m_r,m_v);
		m_r++;
		m_v++;
		return temp;
	}
	friend ostream& operator<<(ostream& os,const Complex& c);
};

ostream& operator<<(ostream& os,const Complex& c){
	int r=c.m_r;
	int v=c.m_v;
	if(r==0){
		os << v << "";
	}else if(v==0){
		os << r;
	}else if (v<0){
		os << r << v << "i";
	}else {
		os << r << "+" << v <<"i";
	}
	return os;
}

int main(){

	Complex c1(1,1);
	Complex c2(2,2);

	cout << "(c2+c1)=" << c1+c2 << endl;
	cout << "(c2-c1)=" << c1-c2 << endl;
	cout << "(c1++ +c2)=" << (c1++ +c2) << endl;
	cout << "(++c1 + c2)=" <<++c1 + c2 << endl;

	return 0;
}
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值