C++中重载流插入运算符的问题
答案:2 悬赏:0 手机版
解决时间 2021-11-29 11:00
- 提问者网友:玫瑰园
- 2021-11-28 11:54
C++中重载流插入运算符的问题
最佳答案
- 五星知识达人网友:青尢
- 2021-11-28 13:26
如果是友元函数的话,一般是重载符号的左边是函数第一个参数,右边是第二个参数
而如果直接内部重载的话,默认重载符号左边就是类的实例,右边是函数的参数
这个你可以看看重载+的话就只有一个参数
按照上面这种推理,你如果不声明为友元,首先参数多了,另外一个实现也错了,默认把类作为输出的左边追问谢谢回答,但是我不是很明白你的意思。
其实我是参照书上的例子写的,不是很明白这个重载的原理。
按我的理解,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里面的函数;限于内容所限,具体可以在评论中讨论
而如果直接内部重载的话,默认重载符号左边就是类的实例,右边是函数的参数
这个你可以看看重载+的话就只有一个参数
按照上面这种推理,你如果不声明为友元,首先参数多了,另外一个实现也错了,默认把类作为输出的左边追问谢谢回答,但是我不是很明白你的意思。
其实我是参照书上的例子写的,不是很明白这个重载的原理。
按我的理解,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里面的函数;限于内容所限,具体可以在评论中讨论
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯