C++ 如何在c+中重载用于在初始化时分配对象的assign运算符+;
我想重载赋值运算符,以便在初始化对象时使用它来分配数据 对于初始化字符串对象,我们可以遵循下面给出的格式C++ 如何在c+中重载用于在初始化时分配对象的assign运算符+;,c++,string,C++,String,我想重载赋值运算符,以便在初始化对象时使用它来分配数据 对于初始化字符串对象,我们可以遵循下面给出的格式 string str = "Hello World !!!"; 但如果我们以同样的方式定义我们的对象,那将是一个错误 比如说 #include<iostream> using namespace std; class Name{ private: string name; public: Name(){} Name(string str){
string str = "Hello World !!!";
但如果我们以同样的方式定义我们的对象,那将是一个错误
比如说
#include<iostream>
using namespace std;
class Name{
private:
string name;
public:
Name(){}
Name(string str){
name=str;
}
};
int main(){
Name name="Jack";
}
因此,如何使类能够接受字符串对象之类的数据。首先,Name=“Jack”代码>是初始化,而不是赋值,因此它与赋值运算符无关
请注意,“Jack”
不是std::string
,而是类型为const char[5]
的字符串文字。然后对于Name=“Jack”
,即需要将其转换为std::string
,然后再转换为Name
。但在一个转换序列中只允许一个用户定义的转换
您可以添加另一个采用const char*
的构造函数
class Name{
...
Name(const char* s) : name(s) {}
};
从const char[]
到const char*
符合标准转换条件,则代码工作正常
或更改Name=“Jack”代码>至姓名(“杰克”)
,即,“Jack”
将被转换为std::string
,并将直接调用Name
的构造函数以初始化对象
或者使用Name=“Jack”s代码>,而“Jack”s
是类型为std::string
的a(因为C++14),则只需要一次转换(从std::string
到Name
)。此行的右侧(不是赋值,而是对象定义和初始化):
调用,因为“Jack”是const char[]
类型,而不是用户定义的Name(string str)
构造函数所期望的std::string
。要使其成为std::string
类型,请使用构造std::string类型的文本的附加s
文本:
Name name = "Jack"s;
并在启用C++14支持的情况下编译,或添加接受const char*
参数的构造函数:
Name(const char* str) {
name = str;
}
无论哪种方式,在使用std::string
类型时都需要包含
标题。为什么不简单地写名称(“Jack”)
?您不需要为此重载运算符。Name=“Jack”
不是赋值。最好澄清一下,从常量字符[5]
到常量字符*
的转换不是用户定义的转换——OP似乎没有太多背景知识。在没有其他解释的情况下建议“Jack”的
,会适得其反。OP的代码在有人告诉他们使用名称空间std摆脱糟糕的时将无法构建代码>。感谢您对这里感兴趣。实际上,我在C++中编写大整数类,所以我想让它完全像一个普通的数据类型那样运行。意味着使用我的类的任何用户都不会觉得它是用户定义的数据类型,因此在这种情况下,用构造函数初始化与正常方法略有不同。所以你能告诉我其他的方法吗?可能或不可能,我们可以直接初始化值,就像我们对int、float所做的那样。@Sourav用于int
或float
问题Name=“Jack”代码>不应适用;你能把这件事说得更清楚些吗?
Name name = "Jack"s;
Name(const char* str) {
name = str;
}