写一个字符串类。对[]进行重载。string[3]='a';char temp=string[3];都OK了。但当 string[3]=NULL;操作是成功了。但是我的类里面有一个整形变量表示长度。怎么处理并保存字符串的长度。char& operator [] ( int Index )
{
.......这里怎么写??
}

解决方案 »

  1.   

    string[3]是个字符,你为什么给它NULL?NULL一般只给指针
    既然是字符串类,[]应该返回一个字符,为什么需要关心、表示长度?字符不就一个字节长度?
      

  2.   

    NULL就是0,可以赋值给任何你需要的变量,谁说只能是指针?对下标操作符
    []
    进行重载,既可以返回变量值,也可以设置变量值。字符不就一个字节长度?
    还要看是什么字符吧, utf-8的可就多了。
      

  3.   

    这取决于你对那个长度变量的定义了,是指存储区域有效内容的长度(比如CString中的GetLength()),还是字符串的有效长度(strlen获取),当你决定了这个变量的作用时,你的那个函数就应该好写了。
      

  4.   

    这是你理解上的错误。没错,NULL就是0,但是当你定义这个宏的时候,已经把它符号化了。定义宏的目的在于使代码更易于理解,因此大家都已经把NULL当作“指针”来对待了,如果在所以可以赋值为0的地方都使用NULL,就没有这个意义了。
    你所谓的长度应该使字符串的长度,这里我所说的一个字节的长度,其实是一个“字符”的长度。你顶楼想涉及的长度我想一定不是多字节字符所对应的长度吧?
      

  5.   

    是字符串的有效长度(strlen获取),
    char& operator [] ( int Index ) 
    {
       return *(mystring+Index);
    } .......实际上只是一个return
    在return之前写,strlen肯定没效果,return之后,更不行了。
    在[]里又不能捕获 NULL。
    总不能这样
    string[3]=NULL;
    string.len=strlen(string.mystring);
    或者
    string[3]=NULL;
    string.len=3;
    吧。
      

  6.   

    NULL当作“指针”NULL就一定要和指针联系在一起?还大家......还我的理解有问题............
      

  7.   

    既然返回的是个char的引用,LZ的需求应该是搞不定的。
    除非你返回的是自定义的另一个类,并且这个类重载了“=”。
      

  8.   

    既然返回的是个char的引用,LZ的需求应该是搞不定的。 我觉得也是这样。除非你返回的是自定义的另一个类,并且这个类重载了“=”。能详细点吗?
      

  9.   

    operator [] 需要返回的是字符串中的一个字符,你要关心长度干吗?
      

  10.   

    这样的类不安全。还是只提供一个const的[]吧
      

  11.   

    我觉得你提的这个问题真的不错。
    你的类里有这么个变量,表示字符串长度,即你分配的内存大小,你的GetLength()是直接返回这个变量吧?
    而同时又有个strlen函数。
    在没有string[3]=NULL;这样的赋值的时候,这两者是一致的,而有了这样的赋值就不一致了。
    是不太好解决。