操作符重載

操作符合函數相似,操作符不用包含頭文件,就可以訪問到操作符,編譯環境已經定義好了操作符,所以可以在自己的程序中對操作符重載(<iostream>中其實也有包含對<< >>的重載),有幾種方式對操作符重載:

1.在文件中直接重載,屬於文件可見。

2.在類中friend重載,這個操作符是由friend修飾,所以他並不是屬於這個類的,即如果在外部定義,那麼外部的也可以訪問到(如果定義也在類內部部,那只有類內可見)。

2.定義爲類的成員函數,這時候,類自身爲操作符重載默認的第一個參數。(這樣定義有需要注意的地方,由於操作符不同函數,函數的參數在括號內,有類對象的要用 "." 表示歸屬。操作符參數在符合周圍,並且第一個參數還有表示類對象的歸屬特性,那麼這樣在外部再次重載時候可能會產生調用衝突 )

示例如下:

Game.h

#include <iostream>
#include <ostream>
using namespace std;
class Game
{
public:
 Game() { status = 0; }
 ostream & operator<<(Game & game)
 {
  cout << game.status;
  return cout;
 }
private:
 int status;
};
#endif

main.cpp

#include <iostream>
#include "Game.h"
using namespace std;
ostream &operator<<(Game &game1, Game &game2)
{
 cout << 4 << endl;
 return cout;
}
int main()
{
 Game game;
 //game<<game;//error,主要原因是操作符參數格式問題(第一個即表示參數有表示歸屬相當於".")於是類內和外部的產生衝突,如果是其他一般函數,則不會遇到這種情況
 return 0;
}

發佈了30 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章