运算符重载(1.成员,友元,双目,单目)【重点】

本文介绍了C++中的运算符重载,包括成员函数和友元函数两种方式。详细讲解了如何重载双目和单目运算符,以及在不同情况下选择成员函数或友元函数的考虑因素。通过示例展示了如何实现复数类的加减运算,以及如何改变运算符作用的私有数据成员。
摘要由CSDN通过智能技术生成

知识点1.写重载函数前要考虑的几点

1.不能重载的5个运算符:. , :: , * , ? :, sizeof

2.对于运算符 = ,() , [] , -> 只能作为成员函数,不能重载为友元函数

3.<<(输出运算符) 和 >>(输入运算符) 只能重载为友元函数,不能重载为成员函数

4.对于单目运算符,建议选择成员函数;双目运算符,最好重载为友元函数

5.对于运算符“+ =,-=,/=,*=,&=,!=,~=,%=,<<=,>>=”建议重载为成员函数

6.对于其他运算符,建议重载为友元函数

7.双目运算符一般可以重载为友元运算符函数或成员运算符函数,但当两个操作数的类型不一致时,必须使用友元函数

知识点2.重载运算符的限制

重载运算符函数可以对运算符做出新的解释,但是:
1.运算符的优先级重载前后不变
2.运算符的结合性重载前后不变
3.运算符的操作数重载前后不变
4.不能创造出新的运算符

知识点3.需要注意的点

1.大部分运算符函数可以重载为成员函数和友元函数
2.区别:成员函数有this指针,友元函数没有this指针
3.不管是成员函数重载,还是友元函数重载,重载后的运算符使用方法相同

知识点4.重载运算符函数的类型

1.成员运算符函数:把运算符函数定义成某个类的成员函数
2.友元运算符函数:把运算符函数定义成某个类的友元函数

知识点5.运算符函数调用的方式(aa和bb都是同一个类中的对象)

1.aa 运算符 bb;//成员或友元都可以这样调用,

## 但是这样使用的前提是运算符函数的类型是该类的类名,不能是voidint之类的类型

e.g
int main()
{
   
	Complex c1(3,4);
	Complex c2(5,-10);
	Complex c3;
	c3=c1+c2;
	cout<<"c1=";
	c1.display();
	cout<<"c2=";
	c2.display();
	cout<<"c1+c2=";
	c3.display();
	return 0;
}

2.aa.operator 运算符(bb);//只有成员函数可以这样调用此调用为双目,单目:aa.operator 运算符();
e.g
int main()
{
   
	Complex c1(3,4);
	Complex c2(5,-10);
	Complex c3;
	c3=c1.operator +(c2);
	cout<<"c1=";
	c1.display();
	cout<<"c2=";
	c2.display();
	cout<<"c1+c2=";
	c3.display();
	return 0;
}

或以下形式(推荐)

#include<iostream>
using namespace std;
class Complex{
   
private:
	double real;
	double imag;
public:
	Complex(){
   real=0;imag=0;}
	Complex(double ,double);
    Complex operator +(Complex );
	void display();
};
Complex::Complex(double r,double i)
{
   
	real=r;
	imag=i;
}
Complex Complex::operator +(Complex c2)
{
   
	return Complex(real+c2.real,imag+c2.imag);
}
void Complex::display()
{
   
	cout<<"("<<real<<","<<imag<<"i)"<<endl;
}
int main()
{
   
	Complex c1(3,4);
	Complex c2(5,-10);
	Complex c3;
	c3=c1+c2;//或者写成c3=c1.operator +(c2);
	cout<<"c1=";
	c1.display();
	cout<<"c2=";
	c2.display();
	cout<<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值