我们如何使用 '=' 运算符为 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&amp; operator= ( const string &amp; );

string&amp; 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++ 中的自定义数据类型赋值?的主要内容,如果未能解决你的问题,请参考以下文章

如何调试并进入转换为 C++ 的自定义语言源?

Doctrine DQL 中的自定义运算符

重载运算符语法讲解

MXNET C++ 代码如何与其 python API 绑定?

C/C++编程笔记:C++中的运算符重载

对于我的自定义 C++ DLL,我的 C# 项目中的 DLLImport(s) 有啥问题?