c++关于流出运算符的重载如果有数组怎么办!?

愤怒的熊猫007 2010-05-19 11:54:25
小弟初学c++,想问下对自己建立的一个复数类写他的重载的流的输入输出函数,我想问的是当输入输出的对象是一个该类的数组,那么如何把数组长度传过去,希望高手给一个“>>”和"<<"关于数组的重载的函数的形参列表!~谢谢!~
...全文
136 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
耍宝王 2010-05-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 arong1234 的回复:]

template <typename t, int dimension>
ostream& operator<<(ostream & out, t[dimension] v)
[/Quote]
LS高招,写了一个简单测试,编译通过
#include<iostream>
using namespace std;

class A
{
friend ostream& operator<<(ostream& out, const A& v);
template<int n> friend ostream& operator<<(ostream& out, const A (&v)[n]);
public:
A(int n = 0):val(n){}
private:
int val;
};

ostream& operator<<(ostream& out, const A& v)
{
out << v.val;
return out;
}

template<int n>
ostream& operator<<(ostream& out, const A (&v)[n])
{
for(int i = 0; i != n; ++i)
out << v[i];

return out;
}

int main()
{
A a(2);
cout << a << endl;

A a3[3] = {1, 2, 3};
cout << a3 << endl;

A a5[5] = {1, 2, 3, 4, 5};
cout << a5 << endl;

return 0;
}
耍宝王 2010-05-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhouming1318 的回复:]

哦!~那string类型是 如何重载的 呢!?
[/Quote]
string难说:C++标准没有规定string具体实现,只是规定了其接口。基于不同的内部实现
其输出重载的原理可能和字符串型char数组一样,也可能是通过string内部的迭代或者直接使用c_str()成员函数等等
arong1234 2010-05-20
  • 打赏
  • 举报
回复
你说的这些都是“逻辑上是数组”实际不是数组的!
char*是一个指针,它不是数组,系统也不需要额外提供“长度”“尺寸”信息
string也是一样,它内部有自己的长度,不需要你额外提供。

我们所说的数组是指诸如
int a[3]这样的实际的数组(不仅仅是逻辑上,还必须类型上也是数组),这种数组,你重载时也许没有办法提供长度来做,或者即使能,也比较麻烦

可能唯一可以尝试是写一个模板流出算子如下
template <typename t, int dimension>
ostream& operator<<(ostream & out, t[dimension] v)

但是这样的算子能不能编译过我就不确信,即使能过,它比一个普通的函数又有多少额外的好处呢?
[Quote=引用 4 楼 zhouming1318 的回复:]
哦!~那string类型是 如何重载的 呢!?
[/Quote]
愤怒的熊猫007 2010-05-20
  • 打赏
  • 举报
回复
哦!~那string类型是 如何重载的 呢!?
耍宝王 2010-05-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhouming1318 的回复:]

引用 1 楼 arong1234 的回复:
如果是数组就不要用流出运算符了,它不能让你携带一个额外的参数。一般我都是另外写一个输出数组或者其他集合的函数来做,而流出只对单个变量

但是对char类型的数组是可以输出的啊,一次正好输出一个字符串啊!~……
[/Quote]
因为字符串型char数组,是用一个'\0'字符作为结束符的,所以不用额外参数
愤怒的熊猫007 2010-05-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 arong1234 的回复:]
如果是数组就不要用流出运算符了,它不能让你携带一个额外的参数。一般我都是另外写一个输出数组或者其他集合的函数来做,而流出只对单个变量
[/Quote]
但是对char类型的数组是可以输出的啊,一次正好输出一个字符串啊!~……
arong1234 2010-05-19
  • 打赏
  • 举报
回复
如果是数组就不要用流出运算符了,它不能让你携带一个额外的参数。一般我都是另外写一个输出数组或者其他集合的函数来做,而流出只对单个变量

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧