C++重载操作符以及宏定义补充

c++重载操作符

需求分析:
由于类似+ -这类的操作符只能满足特定的需求,在实际中无法做到灵活变通。
如:A类+B类就无法实现,
所以c++大牛们就满足了人们c++重写操作符这一需求
方法:
重写操作符仅有两种方法
一:
在类中重写操作符,就比如我上述举的例子A类加B类就可以在A的原定义上重写+号操作符。
(是不是感觉方法一就可以满足所有需求了,而且可以达到封装效果其实不然)
二:
定义全局函数来重载操作符,由于很多情况我们需要用重载c++封装好的操作符
如:
cout<<A类<<endl;
如果按照方法一,我们需要拿到cout所在类的源码进行改写,很明显是不可能的,所以我们需要利用方法二来进行重写。

(提醒,一般方法一可以做到的重写操作符方法二也可以做到,方法二可以做到的方法一不一定可以做到。但是实际上常常用的是方法一 是因为方法一可以达到更好的封装效果,而不用方法二)。

方法一:

步骤:
1.首先我们承认
[函数返回值]+ [operator]+[要修改的操作符]+[(参数)]+{函数体};
是成员函数
2.这个类本身作为参数左值(通常不写,利用this指针进行操作),其余数作为参数右值
3.填充代码
例子:
我们要重载+运算符,(将两个类中的num成员变量加在一起)
1.首先承认
返回值 operator+(){};为成员函数
2.
假设我们利用类中的整数相加,所以
int operator+(B temp){}
3.补充
int operator+(B temp){
return this->num+temp.num;
}
OK 完成了。

方法二:

其实方法二与方法一大相径庭
步骤:
1.首先我们承认
[函数返回值]+ [operator]+[要修改的操作符]+[(参数)]+{函数体};
是全局函数
2.将操作符的操作数作为参数 加上去(与方法一的主要区别)
3.填充代码
例子:
我们要重载-运算符,(将两个类中的num成员变量互减)
1.首先承认
返回值 operator-(){};为成员函数
2.
假设我们利用类中的整数相减,所以
int operator-(A temp0,B temp1){}
3.补充
int operator(A temp0,B temp1){
return temp0.num-temp1.num;
}
OK 完成了。
注意!!!
肯定会有很多读者会发出这样的疑问??那么++i和i++的区别呢
二者的名字不都是++吗???
没错 的确如此,这种情况比较特殊为了让编译器区别左++和右++
重载右++时需要加上一位占位参数即
右++:
void operator++(int temp)
{
temp=this->num;
this->num++;
return temp;
};
左++:
void operator++()
{
//temp=this->num;
this->num++;
return this->num;
};

宏定义补充

由于都是基本用法就不多比比了
见代码

//!!!注意thisclass是类名,show是其中的函数
//单个\代表将两行代码链接
#define AAA()\
for(int i=0;i<10;i++)\
{\
cout<<i<<endl;\
}
//双##代表二者连接一起
#define BBB(thisclass)\
{\
thisclass Ps##thisclass;\
 Ps##thisclass.show();\
}
//单个#相当于 " "
#define CCC(thisclass)\
{\
	cout << #thisclass << endl;\
}

这里值得注意的是 ps##thisclass,在主函数生成的变量名就是ps+thisclass

psmyclass;
所谓的宏定义就是一些代码替换,减少码量。小窍门能多记就多记

总结:

脑子里很乱,总感觉自己想要的是过度的炫耀,啧啧啧。
是有理想还是虚荣心作怪??
是个问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值