operator是c++中的重载操作符,可对操作符进行重载,将operator=作为一个整体进行运算。运算的数据类型是用户自定义的数据类型class。
声明一个重载运算符
- 运算符重载实现为类成员函数
class person{
private:
int age;
public:
person(int a){
this->age = a;
}
inline bool operator == (const person &ps) const;
};
//实现方式
inline bool person :: operator == (const person &ps) const
{
if(this -> age == ps.age)
return true;
return false;
}
//调用方法
int main()
{
person p1(10);
person p2(20);
if(p1 == p2)
cout << " OK " << endl;
return 0;
}
因为operator == 是class person的一个成员函数,所以对象p1,p2都可以调用该函数。if(p1 == p2) ,相当于p1调用函数 == ,把p2作为函数的一个参数传递给该函数,从而实现了两个对象的比较。
- 操作法重载实现为非类成员函数(全局函数)
对于全局重载操作符,代表左操作数的参数必须被显式指定。
class person
{
public:
int age;
private:
};
bool operate==(person const &p1,person const &p2)
{
if(p1->age == p2-> age)
return true;
return false;
}
int main()
{
person rose;
person jack;
rose.age = 11;
jack.age = 23;
if(jack == rose)
cout << "OK" << endl;
return;
}
- 如何决定把操作符重载为类成员函数还是全局名字空间的成员呢?
如果一个重载操作符是类成员,那么只有当与他一起使用的左操作数十该类的对象是,该操作符才会被调用。如果该操作符的左操作符必须是其他的类型,则操作符必须被重载为全局名字空间的成员。