📜  c++中的struct构造函数(1)

📅  最后修改于: 2023-12-03 15:14:03.175000             🧑  作者: Mango

C++中的struct构造函数

在C++中,struct是一种自定义数据类型,用于组织不同类型的数据成员。与类(class)相比,struct的默认访问权限是公共的(public),而类的默认访问权限是私有的(private)。struct也可以具有成员函数和构造函数。

构造函数(Constructor)

构造函数是在创建一个对象时自动调用的特殊成员函数。在C++中,构造函数与类名相同,不返回任何值,也不需要使用void关键字来标识。构造函数用于初始化类的对象的数据成员。

struct中的构造函数可以具有以下特点:

  • 构造函数可以使用参数初始化列表(parameter initialization list)来初始化数据成员。
  • 构造函数可以重载,即可以有多个构造函数,只要它们的参数类型或者个数不同。
  • 如果没有显式地定义构造函数,编译器会生成一个默认的构造函数,该构造函数不执行任何操作。
默认构造函数(Default Constructor)

默认构造函数是不带任何参数的构造函数,如果在struct中没有显式定义构造函数,编译器会生成一个默认构造函数。默认构造函数执行的操作是将数据成员初始化为默认值,例如int类型的数据成员被初始化为0,指针类型的数据成员被初始化为nullptr。

以下是一个struct中的默认构造函数的示例代码:

struct Person {
    std::string name;
    int age;
    double height;

    // 默认构造函数
    Person() {
        name = "";
        age = 0;
        height = 0.0;
    }
};
带参数的构造函数(Parameterized Constructor)

带参数的构造函数是根据传入的参数进行初始化的构造函数。它允许在创建对象时直接传递初始值,从而避免使用默认构造函数后再通过成员函数逐个赋值的操作,提高了代码的简洁性和可读性。

以下是一个struct中的带参数构造函数的示例代码:

struct Person {
    std::string name;
    int age;
    double height;

    // 带参数的构造函数
    Person(const std::string& n, int a, double h) {
        name = n;
        age = a;
        height = h;
    }
};
使用构造函数创建对象

使用构造函数创建对象的方式有两种:

  1. 直接初始化: 在声明对象的同时,将参数传递给构造函数实现对象的初始化。
Person john("John Doe", 25, 180.5);
  1. 拷贝初始化: 以已有对象为模板创建一个新对象。
Person jane = john; // 利用拷贝构造函数
示例代码
#include <iostream>

struct Person {
    std::string name;
    int age;

    // 默认构造函数
    Person() {
        name = "";
        age = 0;
    }

    // 带参数的构造函数
    Person(const std::string& n, int a) {
        name = n;
        age = a;
    }

    // 析构函数
    ~Person() {
        std::cout << "Destructor called for " << name << std::endl;
    }
};

int main() {
    // 默认构造函数创建对象
    Person john;
    std::cout << "Name: " << john.name << ", Age: " << john.age << std::endl;

    // 带参数的构造函数创建对象
    Person jane("Jane Smith", 30);
    std::cout << "Name: " << jane.name << ", Age: " << jane.age << std::endl;

    return 0;
}

以上示例代码演示了使用默认构造函数和带参数构造函数创建Person对象,并输出对象的成员变量值。

需要注意的是,如果在struct中定义了构造函数,一般也应该定义一个析构函数来进行资源的释放操作。在示例代码中,析构函数用于在对象销毁时输出一条信息。

以上就是关于C++中struct构造函数的介绍。通过构造函数,我们可以更方便地对struct对象进行初始化,提高代码的可读性和简洁性。