我正在学习C ++,本周我尝试了解运算符重载,到目前为止没有问题。现在我达到了重载索引操作符,我按照以下方式管理它,
std::string &operator[](size_t index);
std::string const &operator[](size_t index) const;
但是,在几个线程中我读到它最好使用Proxy类,所以我尝试实现一个Proxy类,这里就麻烦了。请注意,我只是在这个简单的类中实现Proxy类,以了解Proxy类的工作方式。我已经在没有Proxy类的情况下重载了所有函数,并认为是时候进行下一步了。
我有一个类Strings,它包含一个指向多个字符串对象的指针。假设我们有一个类Strings的对象,称为str,那么我希望能够使用str [i]来获取第i个字符串并使用str [i] [j]来获取第i个字母的i -th string。因此,我在[]和<<的Proxy类中实现了一个运算符重载,这些都正常工作。
接下来,我希望能够说str [i] = str [j],因此我实现了operator =,但是我无法做到这一点。你看到我做错了什么吗?没有编译错误,但在调用str [i] = str [j]后没有更新该值。
和一个子问题,是Proxy类实现正确吗?它工作正常,但我也想学习以正确的方式使用该语言。
为了避免混淆:我理解使用向量更容易,并且此处不需要Proxy类。但是,我想了解Proxy类的工作原理,在我看来,最好在一个非常简单的类中开始实现它。
class Strings
{
std::string *d_str;
public:
Strings();
Strings(int argc, char *argv[]);
// Some other functions
// ...
// End other functions
class Proxy {
std::string d_string;
public:
Proxy(std::string &str): d_string(str) {}
char &operator[](int j) { return d_string[j]; }
friend std::ostream &operator<<(std::ostream &out, Proxy const &rhs)
{
out << rhs.d_string << '\n';
return out;
}
Proxy &operator=(Proxy const &other)
{
d_string = other.d_string;
return *this;
}
};
Proxy operator[](size_t idx)
{
return Proxy(d_str[idx]);
}
private:
//More functions here
};