過載運算子的常見方法

qq_30825635發表於2020-11-10

過載運算子不需要一定是成員函式,以Person和<運算子為例,下列三種寫法都是正確的

//  "a<b"的過載的三種方法
//作為成員函式過載(常見)
class Person{
    string name;
    int age;
public:
    Person(const char* name, int age):name(name),age(age){}
     bool operator<(const Person& b);
 
};
bool Person::operator<(const Person& b)
{
//作為成員函式時,*this即為左運算元a
...
}
 
//作為友元函式過載
class Person{
    string name;
    int age;
public:
    Person(const char* name, int age):name(name),age(age){}
     friend bool operator<(const Person& a,const Person& b);
 
};
bool operator<(const Person& a,const Person& b)
{
...
}
 
//作為普通函式過載(不推薦)
class Person{
public://注意,過載運算子為普通函式時,使用到的類成員必須為public
    string name;
    int age;
public:
    Person(const char* name, int age):name(name),age(age){}
 
};
bool operator<(const Person& a,const Person& b)
{
...
}

相關文章