我们如何使用 '=' 运算符为 C++ 中的自定义数据类型赋值?
Posted
技术标签:
【中文标题】我们如何使用 \'=\' 运算符为 C++ 中的自定义数据类型赋值?【英文标题】:How can we use '=' operator to assign value to our custom made datatype in c++?我们如何使用 '=' 运算符为 C++ 中的自定义数据类型赋值? 【发布时间】:2021-12-27 12:33:54 【问题描述】:我创建了一个基本的字符串类,我想给它分配一些值
但问题是我必须做这样的事情......
string str("Hello");
有没有办法让我可以这样做......
string str = "Hello";
就像 c++ std:: 定义的类型(向量、字符串等)如何做的一样?
我也希望这样,而不是输入 std::cout << str.val()
,我可以使用 std::cout << str;
来访问它的值,并且同样可以修改(或更新)它。
#include<iostream>
class string
private:
char* str; // An uninitialized string
public:
string(char* text) // Constructor which takes a string
str = text;
char* val() // used to access the value stored in String
return str;
void update(char* string2) // used to update the value of string
str = string2;
;
int main()
string myStr("Hello World\n"); //initializes a string object
std::clog << myStr.val();
myStr.update("Bye World\n"); //updates the value of myStr
std::clog << myStr.val();
感谢回答的人......
【问题讨论】:
"Hello"
是一个char const[6]
并将指针衰减到char const*
,而不是char*
。
【参考方案1】:
你可以使用重载的操作符来做到这一点
string& operator= ( const string & );
string& operator= ( const char *);
【讨论】:
【参考方案2】:您可以重载运算符 = 和
-
重载 = 运算符
string& operator = (char * text)
this->str=text;
return *this;
重载
friend std::ostream& operator << (std::ostream& outputstream,string& thestr)
outputstream<<thestr.val();
return outputstream;
所以整体如下图
#include<iostream>
class string
private:
char* str; // An uninitialized string
public:
string(char* text) // Constructor which takes a string
str = text;
char* val() // used to access the value stored in String
return str;
void update(char* string2) // used to update the value of string
str = string2;
string& operator = (char * text)
this->str=text;
return *this;
friend std::ostream& operator << (std::ostream& outputstream,string& thestr)
outputstream<<thestr.val();
return outputstream;
;
int main()
string myStr="Hello World\n"; //initializes a string object
std::clog<<myStr;
myStr="Bye World\n"; //updates the value of myStr
std::clog << myStr;
【讨论】:
【参考方案3】:您需要手动实现这些运算符('=' 和 'https://en.cppreference.com/w/cpp/language/operators(或搜索c++ operator overloading
,以防链接断开)
在这种情况下,您可以将此代码添加到您的 string
类中。
// Allow assignment with another `string`
string& operator=(const string& other)
str = other.str;
return *this;
// This is optional. Without this, the previous `operator=` will be called
// with `other` implicitly converted to a `string`
string& operator=(char* other)
str = other;
return *this;
// With the `friend` keyword, you can write a global function inside a class
friend std::ostream& operator<<(std::ostream& os, const string& obj)
return os << obj.str;
【讨论】:
虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review @theVoogie 感谢您的提醒。我已经编辑了答案,以后会多加注意。以上是关于我们如何使用 '=' 运算符为 C++ 中的自定义数据类型赋值?的主要内容,如果未能解决你的问题,请参考以下文章