有没有办法将字符串转换为自定义类,例如,如果我有一个名为Numb的类,但我想将其声明为带有=运算符的字符串,我可以重载它吗?
class Numb{
std::string x;
};
int main(){
Numb n = "32";
//Creates a Numb and makes x = "32"
}
答案 0 :(得分:2)
是的,您可以使用converting constructors。类似的东西:
struct A {
A(std::string);
// A is a struct, so str is public
std::string str;
};
// implementation for converting constructor
A::A(std::string s) {
str = s;
}
int main() {
A my_a = std::string("hello");
std::cout << my_a.str << '\n';
}
有时您可能不希望出现此行为。您可以将构造函数标记为explicit
以禁用它。
答案 1 :(得分:2)
您想从字符串文字构造Numbs。 字符串文字与类型字符串文字具有类型const char *
无法区分const char [N]
,我们可以通过编写接受const char *
的函数作为参数。
要定义具有此行为的转换构造函数,只需编写类似于复制构造函数的签名,但不要期望相同类型的参数,而是期望类型为const char *
的参数。它的签名看起来像Myclass(const char *);
或者,您可以从字符串复制或移动构造,但这需要执行Numb n = std::string { "32" };
或类似操作,以将字符串常量转换为std :: string。
下面是一些示例代码,其中main()返回3.这里我们还演示如何处理该值:如果我们改为Num n2 = std::string { "TRAP" };
,代码将返回1.如果我们执行{{1它将返回2.
Num n2 = std::string { "ANYTHING OTHER THAN TRAP" };
编辑:修复类型系统的错误,将字符串arg作为&amp; not&amp;&amp;,简化示例,更新编译器资源管理器链接。
答案 2 :(得分:1)
如果您x
成为public
成员,可以像这样分配给它:
class Numb
{
public:
std::string x;
};
int main()
{
Numb n{ "32" };
Numb o = { "33" };
n = { "34" };
o.x = "35";
}