运算符使用代理类重载

时间:2014-11-24 23:08:34

标签: c++ proxy operator-overloading

我正在学习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
};

0 个答案:

没有答案