21xrx.com
2025-07-10 14:48:02 Thursday
文章检索 我的文章 写文章
C++结构体重载赋值函数
2023-06-29 06:18:54 深夜i     37     0
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++ 结构体重载赋值函数是一种方便的编程技术,它可以让程序员更容易地操作结构体对象。同时,这种技术需要开发者谨慎设计和实现,以确保代码的正确性和效率。

  
  

评论区