【发布时间】:2016-12-16 18:06:11
【问题描述】:
假设我有以下课程:
class temp1 {
private:
int A;
double B;
};
class temp2 {
private:
int A[20];
double B;
};
void main() {
temp1 a[100];
temp2 b;
}
现在的问题是为什么我只需要为 temp2 而不是 temp 1 重载运算符 []? 我知道为了在类 temp 2 中获得可验证 A 中的 10 索引,我确实需要重载运算符 [] 但主要我有类数组 (temp1 a[100]) 那么当我使用 [ ] 运算符而不重载一个运算符时,编译器如何知道我的意思。
【问题讨论】:
-
你真的试过运行代码吗?你有错误吗?
-
"我知道,为了在类 temp 2 中获得可验证 A 中的 10 索引,我确实需要重载运算符 []"。为什么?
-
它与错误有什么关系?我不会得到任何错误..但这不是我的问题,如果我尝试做 b[5],即使我的目标是从 temp 2 获取 A 的 [i] 索引,我也会得到错误,但编译器不明白这一点运算符重载。我问别的事情,为什么 temp1 不需要运算符重载? (我不在乎它是否有效,我试图在这里理解一些事情)
-
我没有看到。你的问题也没有意义,因为它们是不同的东西。
a是temp1的数组,而b是temp2的对象,它具有 20 个ints 数组的成员 -
@Itay.V 我不确定你是否知道其中的区别...
a是一个包含 100 个temp1s 实例的 数组。b是temp2的单个实例。单个对象与对象数组不同;数组可以使用方括号运算符,因为这就是数组在语言中的定义方式。如果你想使用带有括号运算符的 object,你必须自己定义行为。