重载的ostream运算符如何解释这个重载运算符的表达式?

时间:2014-06-28 05:22:25

标签: c++

之前可能已经问过这个问题,但我不太确定要搜索什么 - 至少在搜索哪些条款方面。

无论如何,这是我的问题。请考虑以下代码段:

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是一个动态数组。

1 个答案:

答案 0 :(得分:3)

  

那说,这个表达式是如何处理的?首先应用哪个重载?如果重载&lt;&lt;首先应用运算符,是否需要修改参数I&#39; m传入&lt;&lt;&lt;执行?

这与重载无关。它的运营商优先级,并且它不会改变您的运营商是否过载。

首先是

[],结果会传递给重载的<<运算符。无论超载如何都是如此;操作员的操作数不能影响其优先级。

  

显然,&lt;&lt;除了[]运算符被重载

之外,运算符被重载

这根本不明显。如果你的数组中包含某些类型的对象,那么你只需要重载<<,这些对象不会有operator<<。您的重载[]似乎返回int,因此绝对没有理由编写您自己的<<运算符来处理ostream

  

在这种情况下,我传递的不仅仅是对象本身。相反,我想要打印list_Array [i],这是对我的对象的操作。

你没有&#34;打印一个操作&#34;。操作发生,与打印无关,操作结果将传递给您的<<。结果将是int返回的operator[]