1.思维导图
2.作业
在昨天作业的基础上,完成运算符重载
要求重载的运算符:
#include <iostream>
using namespace std;
class Person
{
private:
int age;
int *p;
public:
//无参构造
Person():p(new int(89))
{
age = 18;
}
//有参构造
Person(int age,int num)
{
this->age = age;
this->p=new int(num);
}
//拷贝构造函数
Person(Person &other)
{
age = other.age;
p = new int;
*p = *(other.p);
cout<<"调用拷贝构造"<<endl;
}
//拷贝赋值函数
Person &operator=(const Person &other)
{
age = other.age;
*p = *(other.p);
cout<<"调用拷贝赋值"<<endl;
return *this;
}
//析构函数
~Person(){cout<<"析构函数"<<endl;}
//显示Person中的属性
void show()
{
cout<<"age="<<age<<"\t"<<"p="<<p<<"\t"<<"*p="<<*p<<endl;
}
//加减乘除求余运算符重载成员函数
Person operator+(Person &a)
{
Person temp;//临时对象
temp.age = this->age+a.age;
*(temp.p) = (*(this->p))+(*(a.p));
return temp;
}
Person operator-(Person &a)
{
Person temp;//临时对象
temp.age = this->age-a.age;
*(temp.p) = *(this->p)-*(a.p);
return temp;
}
Person operator*(Person &p)
{
Person temp;//临时对象
temp.age = this->age*p.age;
*(temp.p) = *(this->p)*(*(p.p));
return temp;
}
Person operator/(Person &p)
{
Person temp;//临时对象
temp.age = this->age/p.age;
*(temp.p) = *(this->p)/(*(p.p));
return temp;
}
Person operator%(Person &p)
{
Person temp;//临时对象
temp.age = this->age%p.age;
*(temp.p) = *(this->p)%(*(p.p));
return temp;
}
//赋值运算符
Person operator+=(Person &a)
{
this->age+=a.age;
*(this->p)+=*a.p;
return *this;
}
Person operator-=(Person &a)
{
this->age-=a.age;
*(this->p)-=*a.p;
return *this;
}
Person operator*=(Person &a)
{
this->age+=a.age;
*(this->p)*=*a.p;
return *this;
}
Person operator/=(Person &a)
{
this->age/=a.age;
*(this->p)/=*a.p;
return *this;
}
Person operator%=(Person &a)
{
this->age%=a.age;
*(this->p)%=*a.p;
return *this;
}
//逻辑运算符
Person operator&&(Person &p)
{
Person temp;//临时对象
temp.age = this->age&&p.age;
*(temp.p) = *(this->p)&&(*(p.p));
return temp;
}
Person operator||(Person &p)
{
Person temp;//临时对象
temp.age = this->age||p.age;
*(temp.p) = *(this->p)||(*(p.p));
return temp;
}
//后自减成员函数
Person &operator--(int)
{
static Person temp;
temp.age=this->age--;
*(temp.p)=*(this->p)--;
return temp;
}
//后自加成员函数
Person &operator++(int)
{
static Person temp;
temp.age=this->age++;
*(temp.p)=*(this->p)++;
return temp;
}
//友元函数
friend bool operator>(Person &p1,Person &p2);
friend bool operator>=(Person &p1,Person &p2);
friend bool operator<=(Person &p1,Person &p2);
friend bool operator<(Person &p1,Person &p2);
friend bool operator==(Person &p1,Person &p2);
friend bool operator!=(Person &p1,Person &p2);
friend Person operator!(Person &p1);
friend void operator-(Person &p);
friend Person &operator++(Person &a);
friend Person &operator--(Person &a);
};
//关系运算全局函数
bool operator>(Person &p1,Person &p2)
{
if(p1.age==p2.age)
{
return *(p1.p)>*(p2.p);
}else {
return p1.age>p2.age;
}
}
bool operator>=(Person &p1,Person &p2)
{
if(p1.age==p2.age)
{
return *(p1.p)>=*(p2.p);
}else {
return p1.age>=p2.age;
}
}
bool operator<=(Person &p1,Person &p2)
{
if(p1.age==p2.age)
{
return *(p1.p)<=*(p2.p);
}else {
return p1.age<=p2.age;
}
}
bool operator<(Person &p1,Person &p2)
{
if(p1.age==p2.age)
{
return *(p1.p)<*(p2.p);
}else {
return p1.age<p2.age;
}
}
bool operator==(Person &p1,Person &p2)
{
if(p1.age==p2.age)
{
return *(p1.p)==*(p2.p);
}else {
return false;
}
}
bool operator!=(Person &p1,Person &p2)
{
if(p1.age==p2.age)
{
return false;
}else if((*p1.p)==(*(p2.p))){
return false;
}
return true;
}
Person operator!(Person &p1)
{
Person temp;//临时对象
temp.age=!p1.age;
*(temp.p)=!(*p1.p);
return temp;
}
//负号重载全局函数
void operator-(Person &p)
{
p.age = -p.age;
*p.p = -(*p.p);
}
//前自加全局函数
Person &operator++(Person &a)
{
++a.age;
++(*a.p);
return a;
}
//前自减成员函数
Person &operator--(Person &a)
{
--a.age;
--(*a.p);
return a;
}
int main()
{
Person p1(18,20);
Person p2 = p1;
Person p3;
p3.show();
p1.show();
p3=p1+p2;
p3.show();
p3=p1-p2;
p3.show();
p3=p1*p2;
p3.show();
p3=p1/p2;
p3.show();
p3=p1%p2;
p3.show();
p3+=p1;
p3.show();
cout<<(p1==p3)<<endl;
return 0;
}