❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️创做不易,麻烦点个关注❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️
❤️❤️❤️❤️❤️❤️❤️❤️❤️文末有惊喜!献舞一支!❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️
目录
9.13 运算符重载
9.13.1 运算符重载的基本概念
9.13.2重载<<输出运算符(全局函数实现)
9.13.3重载>>输入运算符(全局函数实现)
9.13.4可以重载的运算符
9.13 运算符重载
C++ 中的运算符重载允许用户对已存在的运算符进行重新定义,赋予其另一种功能,以适应自定义类型的操作。运算符重载通过特殊的函数名称和语法来实现,在函数中定义了对应运算符的操作。
9.13.1 运算符重载的基本概念
语法:定义重载的运算符就像定义函数,只是该函数的名字是operator@,这里的@代表了被重载的运算符。
思路:
1、弄懂运算符的运算对象的个数。 (个数决定了重载函数的参数个数)
2、识别运算符左边的运算对象 是类的对象还是其他类的对象:全局函数实现 (不推荐)成员函数实现(推荐,少一个参数)其他:只能是全局函数实现
9.13.2 重载<<输出运算符(全局函数实现)
问题:为什么要使用运算符重载?
为了满足上面这个问题,就需要我们使用重载运算符。
后面这个不使用传引用来接这个对象。可以不加引用
特别的:别忘了引用头文件
结果:
上面的 “ cout << Jery; ” 可以替换成 “ operator << (cout,Jery); ” 被编译器优化成前面那个写法了。
并且,如果后面新增了“endl”此时也是不对的
怎么处理呢?
这时候下面这样的写法都可以通过
代码1:
#include <iostream>
#include <string>
#include "array.h"using namespace std;
class Person
{friend void operator<<(ostream &out,Person &ob);
private:int num;string name;float score;
public:Person(){}Person(int num,string name,float score):num(num),name(name),score(score){}
};
//全局函数重载operator<<
void operator<<(ostream &out,Person &ob){out<<ob.num<<" "<<ob.name<<" "<<ob.score<<endl;
}
int main()
{Person Jery(100,"Jery",99.9f);cout<<Jery;return 0;
}
修改增加endl的代码:
class Person
{friend ostream& operator<<(ostream &out,Person &ob);
private:int num;string name;float score;
public:Person(){}Person(int num,string name,float score):num(num),name(name),score(score){}
};
//全局函数重载operator<<
ostream& operator<<(ostream &out,Person &ob){out<<ob.num<<" "<<ob.name<<" "<<ob.score<<endl;return out;
}
int main()
{Person Jery(100,"Jery",99.9f);cout<<Jery<<endl;Person Jery2(100,"Jery2",98.9f);cout<<Jery2;return 0;
}
上述代码均已通过本人亲测可以使用,输出。基于C++11版本以及以上,使用了Qt5.13.2版本。
9.13.3 重载>>输入运算符(全局函数实现)
这里和9.12.2<<输入运算符基本一致,就是输入使用的是istream流
上述暂时不能实现链式操作(就是cin>>a>>b;两个对象就不行,此时考虑返回值,cin>>a完了以后,返回一个cin类型就行了)
9.13.4 可以重载的运算符
C++ 中有三个逻辑运算符:非(!
)、与(&&
)和或(||
)。其中,非(!
)可以被重载,但其他运算符不行。这是因为,逻辑运算符 &&
和 ||
进行短路求值(short-circuiting)的特性,导致它们的行为比较复杂,重载可能会造成语义上的混淆甚至是不确定性。
另一方面,逻辑运算符 &&
和 ||
的操作数必须是布尔类型,因此在用于自定义类型时并没有实际的意义,从而也就没有了重载的必要。如果我们需要在自定义类型上执行类似逻辑运算的操作,可以考虑使用其他的运算符或者函数,例如重载比较运算符或者编写成员函数来完成类似的功能。
点赞👍 + 收藏👐 + 关注👌
❤️您的支持❤️是我最大的动力❤️相互学习❤️共同进步❤️一起搞钱❤️动动发财的小手❤️
⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️十星好评,Erike的专用模板⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️
什 么 ?您 要 打 赏 ?谢 谢 老 板!老 板 大 气!