操作符合函數相似,操作符不用包含頭文件,就可以訪問到操作符,編譯環境已經定義好了操作符,所以可以在自己的程序中對操作符重載(<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;
}