继承自 std::string 或运算符重载
inherit from std::string or operator overloading
我想要 class 如下所示:
Class Test {
Test();
~Test();
...
}
我希望能够使用以下语句:
std::string str;
Test t;
str = t;
我该怎么办?我应该覆盖 to_string 吗?如果是,似乎无法从 std::string class 继承。
或者我必须覆盖特殊操作员?
指针赋值呢?如下所示:
std::string str;
Test* t = new Test();
str = t;
您可以向 std::string
提供用户定义的转换运算符:
class Test {
//...
public:
operator std::string () const {
return /*something*/;
}
};
这将允许 Test
对象隐式转换为 std::string
。
虽然在 C++ 中是可能的,但通常不建议从标准继承 类,请参阅 Why should one not derive from c++ std string class? 了解更多信息。
我想知道,
赋值的作用是什么
str = t;
str 是 std::string 类型,t 是测试类型。那么分配的期望值是多少?没有人能猜到。为了代码清晰,我建议显式调用转换方法或运算符。
这将使您的示例看起来像:
str = t.convertToString();
或者更标准的方法是实现流运算符,这使得
str << t;
(请注意,如果 str 是流类型,则此示例有效,如果是字符串,则需要更多代码,请参阅 C++ equivalent of java.toString?。)
但是,如果你真的想让它在没有转换方法的情况下工作,你可以重写 Test 的字符串赋值运算符:
class Test {
public:
operator std::string() const { return "Hi"; }
}
另见 toString override in C++
虽然这是对您问题的完美解决方案,但它可能会在很长一段时间内带来无法预料的问题 运行,如链接文章中所述。
我想要 class 如下所示:
Class Test {
Test();
~Test();
...
}
我希望能够使用以下语句:
std::string str;
Test t;
str = t;
我该怎么办?我应该覆盖 to_string 吗?如果是,似乎无法从 std::string class 继承。 或者我必须覆盖特殊操作员? 指针赋值呢?如下所示:
std::string str;
Test* t = new Test();
str = t;
您可以向 std::string
提供用户定义的转换运算符:
class Test {
//...
public:
operator std::string () const {
return /*something*/;
}
};
这将允许 Test
对象隐式转换为 std::string
。
虽然在 C++ 中是可能的,但通常不建议从标准继承 类,请参阅 Why should one not derive from c++ std string class? 了解更多信息。
我想知道,
赋值的作用是什么str = t;
str 是 std::string 类型,t 是测试类型。那么分配的期望值是多少?没有人能猜到。为了代码清晰,我建议显式调用转换方法或运算符。
这将使您的示例看起来像:
str = t.convertToString();
或者更标准的方法是实现流运算符,这使得
str << t;
(请注意,如果 str 是流类型,则此示例有效,如果是字符串,则需要更多代码,请参阅 C++ equivalent of java.toString?。)
但是,如果你真的想让它在没有转换方法的情况下工作,你可以重写 Test 的字符串赋值运算符:
class Test {
public:
operator std::string() const { return "Hi"; }
}
另见 toString override in C++
虽然这是对您问题的完美解决方案,但它可能会在很长一段时间内带来无法预料的问题 运行,如链接文章中所述。