运算符重载
开发工具与关键技术:C++、VisualStudio
作者:张国军
撰写时间:2019年04月10日
运算符重载的作用是是我们自定义类型数据更为方便使用,当我们使用自定义类型的时候,如果没用到运算符重载,我们进行输出的时候编译器会给我们报错的,就如下边的图一样
我自定义了一个类,声明了一个v对象,当我想要进行输出的时候,我们进行输出不了,会报错。当我们有写运算符重载的时候呢,那么我们可以直接进行输出了。
ostream& operator<<(ostream&out, Square&a) {
out << a.length;
return out;
}
然后我们就可以输出我们想要的东西了;
当然,我们的运算符重载还有很多其他的运算符重载,当我们需要用的时候那么我们可以去相对应的重载运算符。
那么我们下边来看一个简单的例子。
#include <iostream>
using namespace std;
class staff
{
public:
staff(int i=100);
~staff();
friend staff operator+(staff&, staff&);
friend staff operator-(staff&, staff&);
friend staff operator*(staff&, staff&);
friend staff operator/(staff&, staff&);
staff operator=(staff&);
staff operator++();
staff operator++(int);
staff operator--();
staff operator--(int);
friend ostream& operator<<(ostream&, staff&);
friend istream& operator>>(istream&, staff&);
private:
double SumSalary;
double Salary;
};
staff::staff(int i)
{
Salary = i;
SumSalary = 0;
}
staff::~staff()
{
if (SumSalary == 0) {
cout << "解雇成功:";
}
else {
cout << "此员工还有" << Salary << "工资没结,请尽快结完。";
}
}
staff operator+(staff&a, staff&b) {
staff temp;
temp.Salary = a.Salary + b.Salary;
return temp;
}
staff operator-(staff&a, staff&b) {
staff temp;
temp.Salary = a.Salary + b.Salary;
return temp;
}
staff operator*(staff&a, staff&b) {
staff temp;
temp.SumSalary = a.SumSalary * b. Salary;
return temp;
}
staff operator/(staff&a, staff&b) {
staff temp;
temp.SumSalary = a.SumSalary / b. Salary;
return temp;
}
staff staff::operator=(staff&a) {
SumSalary = a.SumSalary;
Salary = a.Salary;
return *this;
}
staff staff::operator++() {
Salary++;
return *this;
}
staff staff::operator++(int) {
staff temp;
temp.Salary=Salary++;
return temp;
}
staff staff::operator--() {
Salary--;
return *this;
}
staff staff::operator--(int) {
staff temp;
temp.Salary = Salary--;
return temp;
}
ostream& operator<<(ostream&cout, staff&a) {
cout << "总工资为:" << a.SumSalary << "日薪为:" << a.Salary << "/天";
return cout;
}
istream& operator>>(istream&cin, staff&a) {
cin >> a.Salary;
return cin;
}
void main() {
staff a, b = 110;
cout << a <<"\t"<< b;
}
我这个例子是一个临时工的工资登记信息,Salary是工作一天的工资,我给它默认值为100元一天,一个对象就相当于我们一个员工,当我们需要计算员工工资的时候,那么我们可以通过运算符重载进行计算。
由于我的电脑运行有点问题,所以没有运行结果,大概思路也是这样的,所以各位有什么问题,可以留言评论。