操作符重载

来源:互联网 发布:informix批量生成数据 编辑:程序博客网 时间:2024/06/17 19:13

操作符合函数相似,操作符不用包含头文件,就可以访问到操作符,编译环境已经定义好了操作符,所以可以在自己的程序中对操作符重载(<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;
}

原创粉丝点击