为Set()和Get()重载括号运算符

时间:2012-04-28 20:03:29

标签: c++ string object operator-overloading

说明如下:

MyString对象应该重载以下运算符:

1)应重载括号运算符以替换先前赋值的Set和Get函数。请注意,两个实例都应在违反字符串数组bounaries时发出exit(1)。

我的.cpp文件中定义了函数:

 // My original set function to replace the character at the index passed in with the character passed in

 void MyString::Set(int index, char b)
 {
    if(String[index] == '\0')
    {
            exit(1);
    }
    else
    {

            String[index] = b;
    }


 }
 //original get function to get the character of the index passed in as argument
 char MyString::Get(int i)
 {

    if( String[i] == '\0')
    {
            exit(1);
    }
    else
    {
            return String[i];

    }
 }

如何将其转换为重载()运算符函数?我得到的最多是:

 MyString& MyString::operator()(const int index, const char b)
 {
    if(String[index] == '\0')
    {
            exit(1);
    }
    else
    {

            String[index] = b;
    }


}


char& MyString::operator()(const int i)
{

    if( String[i] == '\0')
    {
            exit(1);
    }
    else
    {
            return String[i];

    }
}

我做错了什么?

2 个答案:

答案 0 :(得分:3)

您的边界检查错误,但您在原始代码中已经遇到了这个问题。

您的index参数神秘地更改了从intconst MyString&的类型,看起来不对。

答案 1 :(得分:2)

Get和Set,以及()运算符的两个重载以不正确(错误!)的方式检查字符串错误。请参阅,如果字符串不长,则字符串的第i个或第n个元素不能为'\ 0'。如果您尝试读取超出当前字符串长度的内存,则可能会出现读取访问冲突。

相反,您应检查给定索引是否小于字符串的长度,如果是,则返回该元素。否则,它已经超出界限。

另一件事是,在()运算符的第一个重载中,您使用字符串对象取消引用字符串数组,这没有多大意义。另外,b应该是一个字符,而不是字符串,因为你只设置了一个元素。

相关问题