我定义了简单的转换方法
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_;
};
};
答案 0 :(得分:4)
问题是您的班级来自std::string
。
删除: public std::string
部分,将使用转化运算符。
您的课程已经宣布std::string
成员(因此它使用" has-a"方法)并且不需要" is-a"方法
顺便说一下,从标准库类派生出来几乎总是一个坏主意(它们不是为此而设计的)。