c++d的运算符重载
2021/5/16 12:25:30
本文主要是介绍c++d的运算符重载,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
- 运算符的重载规则
a.运算符重载必须符合语言语法
例如:不能在c++中写
float f;
3.14=f;
所以重载运算符”=”也不能用来下面的操作:
Complex c;
3.14+6i=c;
b.不能重载对内部c++数据类型进行操作的运算符.
例如,不能重载二元浮点减法运算符.
c.不能创建新的运算符,所有重载运算符必须是c++中原来就有的
d.不能重载以下运算符:类成员选择运算符,成员指针运算符,作用域运算符.
2.运算符重载的形式
运算符重载的原型为:
<返回值类型> operator <运算符>(<形式参数表>)
例如:
定义一个complex类
class complex
{
private:
double imag,real;
public:
complex(double a=0,double b=0){real=a;imag=b;}//当无参传入时两者都为0.
complex operator +(complex c);//成员函数重载传入的参数个数都比操作的个数少一个,因为它为复数类,所以返回值也为complex.
};
complex complex::operator +(complex c)
{
complex temp;//定义一个复数类用来保存最后的结果
temp.real=real+c.real;//real默认为当前对象的real,我们也可以用this指针来写.
temp.imag=imag+c.imag;
return temp;
}
在主函数中
c=c1+c2;//在计算机看来,会把它当做c1.operator + (c2);
如果我们需要二元的运算符,这时我们就要将运算符重载定义为友元函数重载运算符.
函数原型为:
friend <返回值类型> operator <运算符>(<形式参数表>).
与成员函数不同,友元函数重载运算符需要的参数个数和操作个数一样多.例:
friend complex operator +(complex c1,complex c2)
{
complex temp;
temp.real=c1.real+c2.real;//因为友元函数没有this指针所以这里也不可以用到this指针
temp.imag=c1.imag+c2.imag;
return temp;
}
在主函数中c1+c2计算机会把它看做为operator + (c1,c2).
Ps:
两种运算符在功能上没有太大的区别,但是友元函数重载运算符更为灵活.
例:
C=3.14+c1;
如果将+用成员函数重载,那么计算就会将它看做为3.14.operator + (c1),那么程序就会报错,如果利用友元函数进行重载,就可以解决这个问题.
单目运算符的重载:
例如:
class Counter
{
private:
Counter(int i=0){value=i;}
Counter operator ++();//这是前缀的++运算符
Counter operator ++(int);//这是后缀的++运算符.
};
在重载中的写法与成员函数运算符重载和友元函数运算符重载类似,--运算符与++运算符的重载一样,括号里面的int没有实际作用,只是为区别前缀和后缀,不需要传入参数.
这篇关于c++d的运算符重载的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26RocketMQ入门指南:搭建与使用全流程详解
- 2024-11-26RocketMQ入门教程:轻松搭建与使用指南
- 2024-11-26手写RocketMQ:从入门到实践的简单教程
- 2024-11-25【机器学习(二)】分类和回归任务-决策树(Decision Tree,DT)算法-Sentosa_DSML社区版
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享