之前可能已经问过这个问题,但我不太确定要搜索什么 - 至少在搜索哪些条款方面。
无论如何,这是我的问题。请考虑以下代码段:
int main()
{
myArray list_Array(10);
int i;
cout << "list_Array : ";
for (i = 0 ; i < 10; i++)
cout << list_Array[i] <<" ";
cout<< endl;
...
这里,myArray
类实际上只是一个带有额外保护措施的数组,例如绑定检查。除了<<
运算符被重载之外,[]
运算符也会重载。我已经重载了后一个运算符,我开始编写实现来重载<<
。
然而,我开始想知道isStream将如何解释表达式的这一部分:list_Array[i]
。
为了解释,我通常可以使用以下内容重载此运算符:
ostream& operator<< (ostream& isObject, someObject& x)
{
isObject << x.length;
return isObject;
}
在这种情况下,我传递的不仅仅是对象本身。相反,我想要打印list_Array[i]
。
为了细节,这是该重载的整体功能:
const int& myArray::operator[](int index) const
{
return list[index];
}
那说,这个表达式是如何处理的?首先应用哪个重载?如果首先应用了重载的<<
运算符,是否需要修改参数I {m}进入<<
实现?
赞赏任何有建设性的意见。
注意:list
是一个动态数组。
答案 0 :(得分:3)
那说,这个表达式是如何处理的?首先应用哪个重载?如果重载&lt;&lt;首先应用运算符,是否需要修改参数I&#39; m传入&lt;&lt;&lt;执行?
这与重载无关。它的运营商优先级,并且它不会改变您的运营商是否过载。
首先是 []
,结果会传递给重载的<<
运算符。无论超载如何都是如此;操作员的操作数不能影响其优先级。
显然,&lt;&lt;除了[]运算符被重载
之外,运算符被重载
这根本不明显。如果你的数组中包含某些类型的对象,那么你只需要重载<<
,这些对象不会有operator<<
。您的重载[]
似乎返回int
,因此绝对没有理由编写您自己的<<
运算符来处理ostream
。
在这种情况下,我传递的不仅仅是对象本身。相反,我想要打印list_Array [i],这是对我的对象的操作。
你没有&#34;打印一个操作&#34;。操作发生,与打印无关,操作结果将传递给您的<<
。结果将是int
返回的operator[]
。