Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在c+中重载用于在初始化时分配对象的assign运算符+;_C++_String - Fatal编程技术网

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;
}