类转换无法按预期工作

时间:2016-08-11 16:31:05

标签: c++

我定义了简单的转换方法

operator string() { return /*...*/; }

当我直接打电话时

obj.operator string()

它工作正常,但当我这样称呼它时......

(string)obj

结果为空字符串。

发生了什么? (我使用的是gcc c ++ 14)(可以根据需要发布代码)

class String : public std::string {
      std::string str_;
    public:
      String() {};
      String(const String & s) {
        str_ = std::string(s.str_);
      };
      String(String && s) {
        str_ = std::string(s.str_);
      };
      String(const string & s) {
        str_ = std::string(s);
      };
      String(const char * s) {
        str_ = std::string(s);
      };

      char & operator[](size_t i) {
        return str_[i];
      };
      String & operator=(const String & str) {
        if (this != &str) {
          str_ = str.str_;
        }
        return *this;
      };
      String & operator=(String && str) {
        if (this != &str) {
          str_ = str.str_;
        }
        return *this;
      };

      bool operator==(const String & str) {
        return str_ == str.str_;
      };
      bool operator!=(const String & str) {
        return str_ != str.str_;
      };

      operator string() {
        return str_;
      };
  };

1 个答案:

答案 0 :(得分:4)

问题是您的班级来自std::string

删除: public std::string部分,将使用转化运算符。

您的课程已经宣布std::string成员(因此它使用" has-a"方法)并且不需要" is-a"方法

顺便说一下,从标准库类派生出来几乎总是一个坏主意(它们不是为此而设计的)。