21xrx.com
2024-11-08 21:14:11 Friday
登录
文章检索 我的文章 写文章
C++结构体重载赋值函数
2023-06-29 06:18:54 深夜i     --     --
C++ 结构体 重载 赋值函数

C++是一门面向对象的编程语言,其中结构体(struct)是一种自定义数据类型。结构体可以包含不同类型的数据成员,如整型、浮点型、字符型等等。为了更方便的操作结构体对象,可以使用重载赋值函数(operator=)来实现赋值操作。

重载赋值函数是一个特殊的成员函数,它允许对象在赋值时执行自定义操作。重载赋值函数的语法如下:


struct st {

  // 数据成员

  st& operator=(const st& other) {

    // 赋值操作

    return *this;

  }

};

其中,“st”是结构体类型名,“other”是右值对象的引用。重载赋值函数的返回值类型是结构体类型的引用,这允许连续的赋值操作。

重载赋值函数的实现需要考虑结构体中的数据成员类型和数据大小。对于简单的数据类型,我们可以直接使用赋值语句(=)进行赋值操作。对于复杂的数据类型,如指针和数组,我们需要手动进行内存分配和复制操作。

下面是一个示例代码,它演示了如何实现一个带有指针成员的结构体的重载赋值函数:


#include <iostream>

#include <cstring>

struct student {

  char* name;

  int age;

  

  // 重载赋值函数

  student& operator=(const student& other) {

    if (this != &other) {  // 避免自赋值

      // 复制 name 成员

      if (other.name != NULL) {

        int len = strlen(other.name) + 1; // 计算字符串长度

        name = new char[len]; // 申请内存

        strcpy(name, other.name); // 复制字符串

      } else

        name = NULL;

      

      // 复制 age 成员

      age = other.age;

    }

    return *this;

  }

};

int main()

{

  student stu1 = "Tom";

  student stu2 = "Lily";

  std::cout << "stu1: " << stu1.name << " " << stu1.age << std::endl;  // 输出:stu1: Tom 18

  std::cout << "stu2: " << stu2.name << " " << stu2.age << std::endl;  // 输出:stu2: Lily 19

  

  stu2 = stu1;

  std::cout << "stu2: " << stu2.name << " " << stu2.age << std::endl;  // 输出:stu2: Tom 18

  

  // 释放内存

  delete[] stu1.name;

  delete[] stu2.name;

  return 0;

}

在上面的代码中,当执行“stu2 = stu1;”操作时,重载赋值函数会被调用,并将 stu1 复制到 stu2 中。在复制 name 成员时,先计算字符串长度,然后申请相应大小的内存,并通过 strcpy 函数复制字符串。最后,将复制后的内存地址返回给调用者。

除了重载赋值函数,C++ 还支持其他运算符的重载,如加减乘除等运算符。这些重载运算符可以进一步优化程序的代码,提高程序的效率。

总的来说,C++ 结构体重载赋值函数是一种方便的编程技术,它可以让程序员更容易地操作结构体对象。同时,这种技术需要开发者谨慎设计和实现,以确保代码的正确性和效率。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复