什麼是運算子過載?
運算子過載概念:對已有的運算子重新進行定義,賦予其另一種功能,以適應不同的資料型別
對於個人而言,學到這裡的感受就是,多了一種能夠自定義方式來進行運算的方式吧,通過類似語法糖的效果operator+來自動實現相應的操作
+號運算子過載:
作用:實現兩個自定義資料型別相加的運算
在+號運算子過載裡面,我們可以通過兩種方式來定義,一種是成員函式來實現,還有一種全域性函式來實現
同樣的呼叫方法也有兩種,以下**有體現
示例**:
#include#includeusing namespace std;
class person
public:
int age;
};//全域性函式 實現+號運算子過載
person operator+(person& p1, int val)
int main()
總結1:對於內建的資料型別的表示式的的運算子是不可能改變的
總結2:不要濫用運算子過載
左移運算子過載
通過左移運算子過載,我們可以實現輸出自定義資料型別,比如cout << 物件 << endl
,實際輸出的是cout << 物件.a << endl
#include#includeusing namespace std;
class person
//void operator<<(cout) {} //在類中定義的話無法實現 cout << p這種形式到時候呼叫的時候只能是p.operator<<(p),簡化版只能是 p << cout,所以我們只在全域性區定義函式
private:
int a;
int b;
};ostream& operator<<(ostream& cout,person& p)
int main()
num & operator--()
num operator--(int)
private:
int a;
};//過載乙個左移運算子
ostream & operator<<(ostream& cout, num n)
int main()
賦值運算子過載:
c++編譯器至少給乙個類新增4個函式
1、預設建構函式(無參,函式體為空)
2、預設析構函式(無參,函式體為空)
3、預設拷貝建構函式,對屬性進行值拷貝
4、賦值運算子operator=
, 對屬性進行值拷貝
如果類中有屬性指向堆區,做賦值操作時也會出現深淺拷貝問題
#include#includeusing namespace std;
class person
person & operator=(person & p)
this->height = new int(*p.height);
return *this;
} ~person()
}public:
int * height;
};int main()
關係運算子過載:
作用:過載關係運算子,可以讓兩個自定義型別物件進行對比操作
還是一樣的,就是返回個型別應該來說是個布林值,因為是==比較
#include#includeusing namespace std;
class person
bool operator==(person& p)
else
} bool operator!=(person& p)
else
}public:
string name;
int age;
};int main() else
system("pause");
return 0;
}
函式呼叫運算子過載:
1、函式呼叫運算子 () 也可以過載
2、由於過載後使用的方式非常像函式的呼叫,因此稱為仿函式,仿函式沒有固定寫法,非常靈活
自己總結下這個知識點:
1、第一點是函式呼叫運算子過載,也就是跟之前的一樣加個()就好了
2、第二點是匿名物件類,也可以我們後面不需要再繼續用到,所以就不需要進行儲存操作,一次性呼叫就可以了
體現**:
#include#includeusing namespace std;
class printer
};int main()
類和物件 運算子過載 3 遞增運算子過載
作用 通過過載遞增運算子,實現自己的整型資料 include include using namespace std 自定義整型 class myinteger 過載前置 運算子 myinteger operator 返回引用為了一直對乙個資料進行遞增操作 過載後置 運算子 myinteger op...
C 類和物件 運算子的過載
運算子過載概念 對已有的運算子重新進行定義,賦予其另一種功能,以適應不同的資料型別 4.5.1 加號運算子過載 作用 實現兩個自定義資料型別相加的運算 include using namespace std 加號運算子過載 class person int m a int m b 函式的宣告 per...
物件 運算子過載
函式解決運算 運算子過載 過載單目運算子 兩個物件的相加的實現 1 函式解決運算 includeusing namespace std 注意事項 1 不允許使用者自定義新的運算子,只能對已有的運算子進行過載 2 不能改變原有的運算子運算元的個數 3 不能改變原有運算子的等級 4 不能改變原有運算子的...