读书人

数组上标重载出错求解

发布时间: 2012-09-06 10:37:01 作者: rapoo

数组下标重载出错,求解!
数组长度检测出现了问题。看图。要怎么修改?
字符串的前一个字符不是'\0'吗?怎么会出这样的错误?求解!

C/C++ code
#include <iostream>using namespace std;class  A{public:    A(int i){length=i;size=new char[length];}    ~A(){delete []size;}    int getlength(){return length;}    char&operator[](int i)//因为重载的是下标,所以后面加上[],因为是数组,不能按值传递,所以按别名返回    {        if (i>=0 && i<length)//前面可以等于0        {            return size[i];//返回的是那个数组元素的值        }        else        {            cout<<endl<<"out of range!!!"<<endl;            return size[length-1];//返回最后一个字符,也就是结束符 \0        }    }private:    int length;    char *size;};int main(){    A arry(6);    char *ch="hello1234";    for (int i=0;i<8;i++){arry[i]=ch[i];}    for (int i=0;i<8;i++){cout<<arry[i];}//执行这句的时候,显示跟预期的有差别    return 0;}

运行完如下:


[解决办法]
楼主,认真看教材!!!
你分配了6个字节,却试图存8个字节!!!
[解决办法]
第一个for循环结束后,size内容为"hello3",输出时,前6个正常,即"hello3",输出第7和8个时,先cout<<endl<<"out of range!!!"<<endl;然后你将size[5]('3')返回了,所以继续输出'3'。
[解决办法]
探讨
数组长度检测出现了问题。看图。要怎么修改?
字符串的前一个字符不是'\0'吗?怎么会出这样的错误?求解!
C/C++ code
#include <iostream>
using namespace std;
class A
{
public:
A(int i){length=i;size=new char[length];}
~A(){delete []size;}
……

读书人网 >C++

热点推荐