C ++运算符重载,我自己的字符串类

时间:2013-10-19 21:31:51

标签: c++ string c++11 operator-overloading

我正在尝试在c ++ 11中创建自己的字符串类,但是我遇到了一些问题。 将我的类与std :: string类进行比较,我无法弄清楚如何使用

std :: string.at(int)='a';方法/过载。

我在自己的类中创建了at(int)方法:

int at(int index)
{
    if(index <0 || index > size-1) {throw std::out_of_range("Error, index out of range");}
    return data[index];
}

如果我只使用它,它的效果很好:

MyString.at(2);

在主文件中:

MyString = "Hello world!"; //Works fine!
MyString.at(2)='a'; //Gives, Error: expressino must be a modifiable Ivalue.

对此有任何帮助都很棒,谢谢!

2 个答案:

答案 0 :(得分:3)

至少有一个at()成员函数需要返回char的非const引用。像这样:

char &at(std::size_t idx)
{
    return data[idx];
}

定义函数的const版本也是有益的:

const char &at(std::size_t idx) const
{
    return data[idx];
}

另请注意std::size_t的使用(这是一种无符号类型,保证足够大以表示任何大小)。这样可以提高可移植性,而不必检查负指数。

答案 1 :(得分:1)

您要返回一个整数,而不是对该字符的引用,您可能需要:

char& at(int index)

当然,您需要返回正确的字符类型,但无论如何您需要返回一个引用,以便调用者能够分配它。