[英]Overload of the operator <<
為什么在以下情況下無需為“ <<”定義重載?
班級
class T{
int n ;
int *pn;
public:
T(int);
T(const T&);
T (int [5]);
~T();
int& operator[] (int);
};
主要的
int main()
{
int tab[5] = {1,2,3,4,5};
T a = tab;
for(int i = 0; i < 5; i++)
cout << a[i] << " ";
cout << endl;
T b = a;
b[1] = 0;
b[3] = 0;
for(int i = 0; i < 5; i++)
cout << b[i] << " ";
cout << endl;
return 0;
}
謝謝
在兩種情況下:
cout << a[i] << " ";
cout << b[i] << " ";
T::operator[](int)
將被調用,它返回int&
。 std::stream
定義operator<<
基本類型(包括int
),所以沒有自定義operator<<
需要在這種情況下。
您需要重載<<
運算符T
的情況下,如果你想輸出全班T
,例如
T a(0);
cout << a;
您只將int
發送到輸出流。 運營商
int& T::operator[] (int);
返回int&
,所以在行上
cout << a[i] << " ";
和
cout << b[i] << " ";
您正在使用流的內置運算符int
。 不需要對類T
特殊處理,因為從未將T
實例發送到流。
實際上,無法說出是否需要使操作員超載。 這取決於您將如何設計類和使用它。 在主函數中不使用運算符的事實並不意味着該類本身不需要運算符。 例如對於我來說這段代碼
for(int i = 0; i < 5; i++)
cout << a[i] << " ";
不清楚。 什么是魔術數5? 我可以在循環中使用其他數字嗎? 一些構造函數接受int [5]作為參數的事實並沒有說明什么,因為等效的參數定義可以看成是int [10],int []或int *。
因此,不能肯定地說您的班級是否不需要此運算符。
類通常模擬某些行為或某些對象。 目前尚不清楚類的行為(無論是容器還是其他),因此無法說出是否需要運算符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.