//A: 操作符重载实现为类成员函数
/*
#include <iostream>
class Person
{
private:
int age;
public:
Person(int a){
this->age=a;
}
//inline bool operator==(const Person &ps)const;
inline bool operator==(const Person *ps)const;
};
//inline bool Person::operator==(const Person &ps)const{
// std::cout<<"this->age=="<<this->age<<", ps.age=="<<ps.age<<"\n";
// if(this->age == ps.age)
// return true;
// else
// return false;
//};
inline bool Person::operator==(const Person *ps)const{
std::cout<<"this->age=="<<this->age<<", ps->age=="<<ps->age<<"\n";
if(this->age == ps->age)
return true;
else
return false;
};
int main()
{
//Person p1(10);
//Person p2(10);
Person *a = new Person(10);
Person *b = new Person(10);
//if(p1 == p2)
if(a == b)
{
std::cout<<"相等\n";
}else
std::cout<<"不相等\n";
system("pause");
return 0;
//由上面的测试可以得出结论,指针与指针之间是不能进行重载运算符比较的
}*/
//B:操作符重载实现为非类成员函数(全局函数)
#include <iostream>
using namespace std;
class Person
{
public:
int age;
};
bool operator==(Person const &p1, Person const &p2)
{
if(p1.age == p2.age)
return true;
else
return false;
};
class Test
{
private:
int m_value;
public:
Test(int x=3){ m_value = x; }
Test &operator++(); //前增量
Test &operator++(int);//后增量
void display()
{
cout<<"m_value="<<m_value<<"\n";
}
};
//前增量 Test& 是指返回一个Test的地址
Test& Test::operator++(){
m_value++; //先增量
return *this; //返回当前对像
};
//后增量
Test& Test::operator++(int)
{
Test tmp(*this); //创建临时对像
m_value++; //再增量
return tmp; //返回临时对像
}
int main()
{
Person a;
Person b;
a.age=10;
b.age=10;
if(a == b){
cout<<"相等\n";
}else
cout<<"不相等\n";
cout<<"进行另外一个测试\n";
Test t;
t.display();
t++;
t.display();
++t;
t.display();
system("pause");
return 0;
}