C++_operator[]重载[]
发布网友
发布时间:2023-08-01 08:01
我来回答
共2个回答
热心网友
时间:2023-09-06 09:05
这个正常啊~
for (int i = 0; i < 8; ++i)
a[i] = ch[i];
你的i<8, 这样当i>5后,你返回的都是a[5],那么c[6],c[7]都会覆盖a[5],而:
char *ch = "helloaa";
实际长度是7,因此c[7]指向结尾的'\0', 因此最后a的输出实际是:
”hello “
主语最后的那个空格~~~
追问谢谢啊。正解就是把‘/0’传过去了。
追答
不客气,对你有帮助就好~
模拟了一下你的类,大致应该这样:
class A {
public:
A(int a = 0) : length(a) {
if (length > 0) size = new char[a+1]; // 这里 +1
else size = NULL;
}
A(const A& rhs) {...}
A& operator=(const A& rhs) {...}
~A() {delete[] size;}
size_t getSize() const {return length;}
char& operator[](int i) {
if (i>=0 && i < length) {
return size[i];
}
else {
cout << "overflow :" << i << endl;
return size[length]; // 这里!
}
}
private:
size_t length;
char *size;
};
热心网友
时间:2023-09-06 09:06
我还是第一次知道能这样重载运算符。我觉得你在重载[]函数里边又调用的[],这不就造成了递归调用了吗追问不会递归。这重载[]是针对 对象[]重载。而不是所有数组[] 。
想递归很简单啊。在重载[]代码里面定义一个 对象two 然后retuan two[]。这就死递归了