gpt4 book ai didi

c++ - 如何重载赋值运算符以在C++中初始化时分配对象

转载 作者:搜寻专家 更新时间:2023-10-31 02:08:33 24 4
gpt4 key购买 nike

我想重载赋值运算符,以便在对象初始化时使用它来分配数据

对于初始化字符串对象,我们可以遵循下面给出的格式

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

显示错误如

E:\Documents\test.cpp||In function 'int main()':|
E:\Documents\test.cpp|13|error: conversion from 'const char [5]' to non-scalar type 'Name' requested|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

那么如何创建一个类,使其可以接受像字符串对象这样的数据。

最佳答案

首先,Name name="Jack";是初始化,不是赋值,与赋值运算符无关。

请注意,"Jack" 不是 std::string,而是类型为 const char[5] 的字符串文字。然后是 Name name="Jack";,即 copy initialization ,它需要转换为std::string,然后再转换为Name。但是在一个转换序列中只允许一个用户定义的转换。

您可以添加另一个采用const char* 的构造函数,

class Name{
...
Name(const char* s) : name(s) {}
};

Implicit conversionconst char[]const char* 符合标准转换,然后代码可以正常工作。

或者将Name name="Jack";改为Name name("Jack");,即direct initialization , "Jack" 将被转换为 std::string, Name 的构造函数取 std::string > 将直接调用以初始化对象。

或者使用Name name = "Jack"s;,而"Jack"s是一个std::string literal (C++14 起) 类型为 std::string,则只需要一次转换(从 std::stringName) .

关于c++ - 如何重载赋值运算符以在C++中初始化时分配对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47452164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com