我无法重载我的<< operator用于打印未知大小的数组的内容。我搜索了一个解决方案,但我找到的唯一一个解决方案是要求我将所有私有数据成员放在一个结构中(这对我来说似乎有点不必要)。我无法编辑该函数使其成为朋友或将* q更改为& q(或const)。
这是我的<<过载代码:
ostream& operator<<(ostream& out, Quack *q)
{
if (q->itemCount() == 0)
out << endl << "quack: empty" << endl << endl;
else
{
int i;
int foo;
for (int i = 0; i < q->itemCount(); i++ )
{
foo = (*q)[i];
out << *(q + i);
} // end for
out << endl;
}
return out;
}
以下是我的私人数据成员:
private:
int *items; // pointer to storage for the circular array.
// Each item in the array is an int.
int count;
int maxSize;
int front;
int back;
以下是调用函数的方法(无法编辑):
quack = new Quack(QUACK_SIZE);
//put a few items into the stack
cout << quack;
以下是输出格式的格式:
quack: 1, 2, 3, 8, 6, 7, 0
如果数组为空,则
quack: empty
任何帮助将不胜感激。谢谢!
答案 0 :(得分:4)
另一种选择是重定向到成员函数,如下所示:
void Quack::printOn(ostream &out) const
{
out << "quack: ";
if(count == 0)
out << "empty";
else
{
out << items[0];
for ( int i = 1 ; i < count ; i++ )
{
out << ", " << items[i];
}
}
out << "\n";
}
ostream &operator<<(ostream &out,const Quack &q)
{
q.printOn(out);
return out;
}
答案 1 :(得分:1)
通常,您应该让operator<<
为const Quack&
,而不是Quack*
:
ostream& operator<<(ostream& out, const Quack &q)
{
...
}
将其放入Quack
班级定义:
friend ostream &operator<<(ostream &stream, const Quack &q);
这将允许您的operator<<
访问q
的私人成员。