全局函数实现运算符重载
#include "05_fun.h"
// 全局函数实现运算符重载
// 算数运算符重载 + - * / %
const Per operator+(const Per &L, const Per &R)
{
Per temp;
temp.a = L.a + R.a;
temp.b = L.b + R.b;
return temp;
}
const Per operator-(const Per &L, const Per &R)
{
Per temp;
temp.a = L.a - R.a;
temp.b = L.b - R.b;
return temp;
}
const Per operator*(const Per &L, const Per &R)
{
Per temp;
temp.a = L.a * R.a;
temp.b = L.b * R.b;
return temp;
}
const Per operator/(const Per &L, const Per &R)
{
Per temp;
temp.a = L.a / R.a;
temp.b = L.b / R.b;
return temp;
}
const Per operator%(const Per &L, const Per &R)
{
Per temp;
temp.a = L.a % R.a;
temp.b = L.b % R.b;
return temp;
}
// 关系运算符重载 > >= < <= == !=
bool operator>(const Per &L, const Per &R)
{
if (L.a > R.a && L.b > R.b)
return true;
else
return false;
}
bool operator>=(const Per &L, const Per &R)
{
if (L.a >= R.a && R.a >= R.b)
return true;
else
return false;
}
bool operator<(const Per &L, const Per &R)
{
if (L.a < R.a && L.b < R.b)
return true;
else
return false;
}
bool operator<=(const Per &L, const Per &R)
{
if (L.a <= R.a && L.b <= R.b)
return true;
else
return false;
}
bool operator==(const Per &L, const Per &R)
{
if (L.a == R.a && L.b == R.b)
return true;
else
return false;
}
bool operator!=(const Per &L, const Per &R)
{
if (L.a != R.a && L.b != R.b)
return true;
else
return false;
}
// 赋值运算符重载 += -= *= /= %=
Per &operator+=(Per &L, const Per &R)
{
L.a += R.a;
L.b += R.b;
return L;
}
Per &operator-=(Per &L, const Per &R)
{
L.a -= R.a;
L.b -= R.b;
return L;
}
Per &operator*=(Per &L, const Per &R)
{
L.a *= R.a;
L.b *= R.b;
return L;
}
Per &operator/=(Per &L, const Per &R)
{
L.a /= R.a;
L.b /= R.b;
return L;
}
Per &operator%=(Per &L, const Per &R)
{
L.a %= R.a;
L.b %= R.b;
return L;
}
对应头文件
#ifndef __05FUN_H__
#define __05FUN_H__
#include <iostream>
using namespace std;
class Per // 全局
{
// 算数运算符重载 + - * / %
friend const Per operator+(const Per &L, const Per &R); // +
friend const Per operator-(const Per &L, const Per &R); // -
friend const Per operator*(const Per &L, const Per &R); // *
friend const Per operator/(const Per &L, const Per &R); // /
friend const Per operator%(const Per &L, const Per &R); // %
// 关系运算符重载 > >= < <= == !=
friend bool operator>(const Per &L, const Per &R); // >
friend bool operator>=(const Per &L, const Per &R); // >=
friend bool operator<(const Per &L, const Per &R); // <
friend bool operator<=(const Per &L, const Per &R); // <=
friend bool operator==(const Per &L, const Per &R); // ==
friend bool operator!=(const Per &L, const Per &R); // !=
// 赋值运算符重载 += -= *= /= %=
// operator=只能是成员函数
friend Per &operator+=(Per &L, const Per &R); // +=
friend Per &operator-=(Per &L, const Per &R); // -=
friend Per &operator*=(Per &L, const Per &R); // *=
friend Per &operator/=(Per &L, const Per &R); // /=
friend Per &operator%=(Per &L, const Per &R); // %=
private:
int a;
int b;
public:
Per() {}
Per(int a, int b) : a(a), b(b) {}
void show() { cout << a << ' ' << b << endl; }
};
#endif
成员函数实现运算符重载
#include "04_fun.h"
// 成员函数实现运算符重载
// 算数运算符重载 + - * / %
const Per Per::operator+(const Per &p) const
{
Per temp;
temp.a = a + p.a;
temp.b = b + p.b;
return temp;
}
const Per Per::operator-(const Per &p) const
{
Per temp;
temp.a = a - p.a;
temp.b = b - p.b;
return temp;
}
const Per Per::operator*(const Per &p) const
{
Per temp;
temp.a = a * p.a;
temp.b = b * p.b;
return temp;
}
const Per Per::operator/(const Per &p) const
{
Per temp;
temp.a = a / p.a;
temp.b = b / p.b;
return temp;
}
const Per Per::operator%(const Per &p) const
{
Per temp;
temp.a = a % p.a;
temp.b = b % p.b;
return temp;
}
// 关系运算符重载 > >= < <= == !=
bool Per::operator>(const Per &p)
{
if (a > p.a && b > p.b)
return true;
else
return false;
}
bool Per::operator>=(const Per &p)
{
if (a >= p.a && b >= p.b)
return true;
else
return false;
}
bool Per::operator<(const Per &p)
{
if (a < p.a && b < p.b)
return true;
else
return false;
}
bool Per::operator<=(const Per &p)
{
if (a <= p.a && b <= p.b)
return true;
else
return false;
}
bool Per::operator==(const Per &p)
{
if (a == p.a && b == p.b)
return true;
else
return false;
}
bool Per::operator!=(const Per &p)
{
if (a != p.a && b != p.b)
return true;
else
return false;
}
// 赋值运算符重载 += -= *= /= %=
Per &Per::operator=(const Per &p)
{
if (this != &p)
{
a = p.a;
b = p.b;
}
return *this;
}
Per &Per::operator+=(const Per &p)
{
a += p.a;
b += p.b;
return *this;
}
Per &Per::operator-=(const Per &p)
{
a -= p.a;
b -= p.b;
return *this;
}
Per &Per::operator*=(const Per &p)
{
a *= p.a;
b *= p.b;
return *this;
}
Per &Per::operator/=(const Per &p)
{
a /= p.a;
b /= p.b;
return *this;
}
Per &Per::operator%=(const Per &p)
{
a %= p.a;
b %= p.b;
return *this;
}
对应头文件
#ifndef __04FUN_H__
#define __04FUN_H__
#include <iostream>
using namespace std;
class Per // 成员
{
private:
int a;
int b;
public:
Per() {}
Per(int a, int b) : a(a), b(b) {}
void show() { cout << a << ' ' << b << endl; }
// 算数运算符重载 + - * / %
const Per operator+(const Per &p) const;
const Per operator-(const Per &p) const;
const Per operator*(const Per &p) const;
const Per operator/(const Per &p) const;
const Per operator%(const Per &p) const;
// 关系运算符重载 > >= < <= == !=
bool operator>(const Per &p);
bool operator>=(const Per &p);
bool operator<(const Per &p);
bool operator<=(const Per &p);
bool operator==(const Per &p);
bool operator!=(const Per &p);
// 赋值运算符重载 = += -= *= /= %=
Per &operator=(const Per &p);
Per &operator+=(const Per &p);
Per &operator-=(const Per &p);
Per &operator*=(const Per &p);
Per &operator/=(const Per &p);
Per &operator%=(const Per &p);
};
#endif
主函数
// #include "04_fun.h"
#include "05_fun.h"
int main()
{
Per p1(1, 1);
Per p2(2, 2);
// 算数运算符重载 + - * / %
Per p3 = p1 + p2;
p3.show();
Per p4 = p1 - p2;
p4.show();
Per p5 = p1 * p2;
p5.show();
Per p6 = p1 / p2;
p6.show();
Per p7 = p1 % p2;
p7.show();
// 关系运算符重载 > >= < <= == !=
if (p1 > p2)
{
cout << "p1>p2" << endl;
}
else if (p1 >= p2)
{
cout << "p1>=p2" << endl;
}
else if (p1 < p2)
{
cout << "p1<p2" << endl;
}
else if (p1 <= p2)
{
cout << "p1<=p2" << endl;
}
else if (p1 == p2)
{
cout << "p1==p2" << endl;
}
else
{
cout << "p1!=p2" << endl;
}
// 赋值运算符重载 = += -= *= /= %=
p1 = p3;
p1.show();
p1 += p2;
p1.show();
p1 -= p2;
p1.show();
p1 *= p2;
p1.show();
p1 /= p2;
p1.show();
p1 %= p2;
p1.show();
return 0;
}