天天看點

c++ 關鍵字operator

文章目錄

      • 1. 操作符重載
      • 2. 類型操作符重載
      • 3. 全局操作符重載
      • 4. 總結

1. 操作符重載

  • 内置類型的一些操作符在内部都定義好了,可以直接用;自定義類型想使用一些操作符必須要重載。
  • 常見的操作符重載有>、<、=、==等
  • 具體可以參考哪些操作符可以重載的表。

2. 類型操作符重載

  • 我們有個Person類,定義如果2個對象的age相同,那麼他們就相等。
  • 這就需要操作符重載,代碼如下:
#include <iostream>
#include <vector>
using namespace std;

class Person
{
public:
    Person(int age)
    {
        m_age = age;
    };

public:
    bool operator == (Person &p){
        if(this->m_age == p.m_age)
            return true;
        return false;
    }

private:
    int m_age;
};

int main() {

    Person a(10),b(10);
    bool bequal = (a == b);//1
    if(bequal)
        cout<<"a.age == b.age"<<endl;
    else
        cout<<"a.age != b.age"<<endl;
    return 0;
}
           

輸出a.age == b.age

在1處,會自動調用操作符重載函數判斷是否相等,傳回bool值。

這是類型操作符重載。

  • 操作符重載要把operator ==(operator+操作符)看成函數名,這樣比較好了解!

3. 全局操作符重載

  • 假設我們定義Cat與Dog年齡相等它們就相等,這是2個不同的類型對象,這時候就要全局操作符重載。
#include <iostream>
#include <vector>
using namespace std;

class Cat
{
public:
    Cat(int age)
    {
        m_age = age;
    };
public:
    int GetAge()
    {
        return m_age;
    }
private:
    int m_age;
};

class Dog
{
public:
    Dog(int age)
    {
        m_age = age;
    };
public:
    int GetAge()
    {
        return m_age;
    }
private:
    int m_age;
};
bool operator == (Cat &c, Dog &d)
{
    if(c.GetAge() == d.GetAge())
        return true;
    return false;
}
int main() {

    Cat c(10);
    Dog d(10);
    bool bequal = (c == d);
    if(bequal)
        cout<<"cat == dog"<<endl;

    int a(10),b(10);
    if(a == b)
        cout<<"int a == int b"<<endl;
    return 0;
}
           

輸出:

cat == dog

int a == int b

  • 全局操作符重載可以定義不同類型對象之間的操作,而且他并不影響内置類型操作符的作用。

4. 總結

  • 操作符分一目運算操作符,二目運算操作符,一目運算操作符重載不需要運算右值,是以重載函數不需要參數;對應的二目需要一個參數。
  • 類操作符重載定義的是同類型對象的操作符。
  • 全局操作符重載,定義的是不同類型對象的操作符,且不影響内置類型的操作符作用。
  • 同一操作符全局操作符重載隻能有一個,參數就算不同也不行。

繼續閱讀