将字符串转换为自定义类

时间:2018-05-22 17:46:16

标签: c++

有没有办法将字符串转换为自定义类,例如,如果我有一个名为Numb的类,但我想将其声明为带有=运算符的字符串,我可以重载它吗?

class Numb{
      std::string x;
};

int main(){
    Numb n = "32";
   //Creates a Numb and makes x = "32"
}

3 个答案:

答案 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" };

https://godbolt.org/g/Lqwdiw

编辑:修复类型系统的错误,将字符串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";
}