#include<iostream>//23
using namespace std;
class Complex2//a+bi复数运算
{
public:
Complex2(int a = 0, int b = 0)
{
this->a = a;
this->b = b;
}
void printCom()
{
cout << a << '+' << b << 'i' << endl;
}
public://实现运算符重载
//1.全局函数重载+号运算符
friend Complex2 operator+(Complex2&c1, Complex2&c2);
//3.前置++
friend Complex2& operator++(Complex2&c1);
//5.后置++,先使用
friend Complex2 operator++(Complex2&c1, int);
public:
//2.成员函数重载-号运算符
Complex2 operator-(Complex2 &c2)
{
Complex2 tmp(this->a - c2.a, this->b - c2.b);
return tmp;
}
//4.成员函数重载前置--运算符
Complex2& operator--()//因为c1自身要改变,所以返回引用Complex2 &,而不是简单的Complex2
{
this->a--;
this->b--;
return *this;//注意返回值是*this
}
//6.成员函数重载后置--
Complex2& operator--(int)//因为是先使用(返回)再+1,所以返回的时候值未改变,所以不返回指针类型
{
Complex2 tmp = *this;
this->a--;
this->b--;
return tmp;
}
private:
int a;
int b;
};
Complex2 operator+(Complex2&c1, Complex2&c2)
{
//不能访问类的私有属性,所以将全局函数声明为类的友元(friend)函数
Complex2 tmp(c1.a + c2.a, c1.b + c2.b);
return tmp;
}
Complex2& operator++(Complex2&c1)//返回值Complex2 &
{
c1.a++;
c1.b++;
return c1;
}
//后置++用占位符与前置++相互区别
//后置c++与前置++c区别:c++是先使用c的原始值再让c+1
Complex2 operator++(Complex2&c1,int)//返回值Complex2
{
Complex2 tmp = c1;
c1.a++;
c1.b++;
return tmp;
}
int main()
{
Complex2 c1(1, 2), c2(3, 4);
//1.全局函数法法实现+号运算符重载
//Complex2 operator+(Complex2&c1, Complex2&c2);
Complex2 c3 = c1 + c2;//4+6i
c3.printCom();
//2.成员函数法实现-号运算符重载
//c1.operator-(c2);
//Complex2 operator-(Complex &c2)
Complex2 c4 = c1 - c2;//-2-2i
c4.printCom();
//3.全局函数法实现前置++操作符
//Complex2& operator++(Complex2&c1)
++c1;//2+3i
c1.printCom();
//4.成员函数法实现前置--操作符
//c1.operator--();
//Complex2 &operator--()
--c1;//1+2i
c1.printCom();
//5.全局函数实现后置++操作符
c1++;
c1.printCom();
//6.成员函数实现后置--操作符
c1--;
c1.printCom();
system("pause");
return 0;
}
实现前置++后置++前置--后置--运算符重载的两种方法(全局函数法和成员函数法)
最新推荐文章于 2023-11-27 18:51:10 发布