永发信息网

C++中重载流插入运算符的问题

答案:2  悬赏:0  手机版
解决时间 2021-11-29 11:00
C++中重载流插入运算符的问题
最佳答案
如果是友元函数的话,一般是重载符号的左边是函数第一个参数,右边是第二个参数
而如果直接内部重载的话,默认重载符号左边就是类的实例,右边是函数的参数
这个你可以看看重载+的话就只有一个参数

按照上面这种推理,你如果不声明为友元,首先参数多了,另外一个实现也错了,默认把类作为输出的左边追问谢谢回答,但是我不是很明白你的意思。
其实我是参照书上的例子写的,不是很明白这个重载的原理。
按我的理解,cout是ostream的一个全局对象,所以cout << data的显式调用是不是就应该是cout.operator<<(data)?但是重载的时候为什要写两个参数,那个stream形参是把什么传递进去了?追答给你一些重载的例子看看:
class test{
public:
int v;

test():v(0){}
test(const int &a):v(a){}
test(const test &t1):v(t1.v){}


//比较两个对象的大小
bool operator<(const test &t1) const{
return (v < t1.v);
}
//比较对象和int的大小
bool operator<(const int &t1) const{
return (v < t1);
}
//友元函数,比较int和对象的大小
friend inline bool operator<(const int &a, const test & t1){
return (a < t1.v);
}


//对象间赋值
test & operator=(const test &t1){
v = t1.v;
return *this;
}
//int赋值给对象
test & operator=(const int &t1){
v = t1;
return *this;
}


//对象加对象
test operator+(test &t1){
test t2;
t2.v = v + t1.v;
return t2;
}


//对象加上对象
test &operator+=(const test &t1){
v += t1.v;
return *this;
}
//对象加上int
test &operator+=(const int &a){
v += a;
return *this;
}

//对象==对象
bool operator==(const test &t1)const{
return (v == t1.v);
}
//对象==int
bool operator==(const int &t1)const{
return (v == t1);
}



friend inline ostream & operator << (ostream & os, test &t1){
cout << "class t(" << t1.v << ")" << endl;
return os;
}
};

你说的cout,问题是你定义的cout.operator(data)它并不是stream里面的函数;限于内容所限,具体可以在评论中讨论
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
男士的转运珠手链编成什么样的好看?配什么材
基督教里,最终人的归属是否就是好人进天堂,
温州菜篮子批发市场
脸部摸上去有不规则凸起感但不粗糙怎么回事
请问一下这个是什么石头啊,刚刚挖出来的
在后的遗嘱和在先的遗赠哪个优先,有法律依据
万能GV搜索器的关键词应该怎么写
外汇出入金的时间一般几天?
单选题5世纪末的西欧大国是A.法兰克王国B.查
2004年9月初2下年5:40出生姓郑取什么名字最好
形容振作的成语有哪些?
抗日在1944
请问卤肉时,哪几种香料应该放多一点?
通州区北国风书店是西大街 还是新华大街啊?
请问这是什么电视剧里挠脚心的镜头》
推荐资讯
西安918路公交车经过地铁韦曲南吗?
现在从事批发零售的企业,到底年销售额达到多
单选题把新疆喀什建设成为中国西部明珠的战略
谁有opnet10.0的安装包(我有个仿真平台只能
睡前泡脚真能消除疲劳?
梦到和生意合伙人杀狼
汽车配置中cdc是什么功能
是不是与come有关的词组都无被动形式?
请问,水城路虹口路在哪个区
怎么在家自己做芦荟润肤露
赣县到清溪村汽车发车时间
镍在燃料电池中能改变反应速度,但自身质量和
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?