为什么不需要为“<<”定义重载有以下情况?
班级
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;
}
由于
答案 0 :(得分:4)
在这两种情况下:
cout << a[i] << " ";
cout << b[i] << " ";
将调用 T::operator[](int)
,返回int&
。 std::stream
为基本类型定义operator<<
(包括int
),因此在这种情况下不需要自定义operator<<
。
如果您要输出整个班级<<
,则需要重载T
的{{1}}运算符,例如
T
答案 1 :(得分:2)
您只是将int
发送到输出流。运营商
int& T::operator[] (int);
返回int&
,行
cout << a[i] << " ";
和
cout << b[i] << " ";
您正在使用流的int
内置运算符。不需要对类T
进行特殊处理,因为没有T
的实例发送到流。
答案 2 :(得分:0)
事实上,不可能说你是否需要重载操作员。它取决于你如何设计类并使用它。您不在主函数中使用运算符的事实并不意味着类本身不需要运算符。例如,对于我,然后这个代码
for(int i = 0; i < 5; i++)
cout << a[i] << " ";
尚不清楚。什么是神奇的数字5?我可以在循环中使用其他数字吗?某些构造函数接受作为参数int [5]的事实没有说明,因为等效参数定义可以看作int [10],int []或int *。
所以不能确定你的班级是否需要这个操作员。
类通常模拟某些行为或某些对象。目前尚不清楚你班级的行为是什么(无论是容器还是其他东西),因此无法确定是否需要操作员。