您的位置:首页 > 编程语言 > C语言/C++

【ThinkingInC++】61、非成员运算符

2015-12-10 15:41 459 查看

非成员运算符

当操作者的左侧是不同的类时。运算符重载不可能是正确的类中。

IostreamOperatorOverloading.cpp

/**

* 书本:【ThinkingInC++】

* 功能:非成员运算符

* 时间:2014年10月4日14:23:25

* 作者:cutter_point

*/

//当运算符的左側是不同的类的时候,就不能吧运算符重载到类里面了。

#include"../require.h"

#include<iostream>

#include<sstream>

#include<cstring>

usingnamespace std;

classIntArray

{

enum {sz=5};

int i[sz];

public:

//吧数组i初始化,吧数组里面sz*sizeof(*i)个数初始化为0

IntArray() {memset(i, 0, sz*sizeof(*i)); }

//重载[]操作符

//这个左側參数是这个类,也就是IntArray[x]代表者i[x];

int& operator [] (int x)

{

require(x >= 0 && x < sz,"IntArray::operator[] out of range");

return i[x];

}

//两个友元函数

friend ostream& operator <<(ostream& os, const IntArray& ia);

friend istream& operator >>(istream& is, IntArray& ia);

};

ostream&operator << (ostream& os, const IntArray& ia)

{

for(int i=0 ; i<ia.sz ; ++i)

{

os<<ia.i[i];

if(i != ia.sz-1)

os<<", ";

}

os<<endl;

return os;

}

//输入友元

istream&operator >> (istream& is, IntArray& ia)

{

for(int i=0 ; i<ia.sz ; ++i)

is>>ia.i[i];

return is;

}

int main()

{

stringstream input("47 34 56 92103");  //吧字符流和这个string绑定

IntArray I;

input>>I;   //吧绑定的字符串输入到I中。每次以空格隔开

I[4]=-1;

cout<<I;

return 0;

}


请恭喜我的叔叔


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: