admin 管理员组

文章数量: 887021


2023年12月24日发(作者:jersey club)

结构体的构造函数和析构函数

结构体是C++中的一种数据类型,它可以将不同的变量组织在一起以便于使用,同时为了更好的控制结构体变量的初始化和清理,C++提供了结构体的构造函数和析构函数。

1. 构造函数

构造函数是一种特殊的函数,它在创建结构体变量时被自动调用。它的主要作用是在创建结构体变量时对其进行初始化。构造函数与结构体同名,没有返回值,并且可以有一个或多个参数。当构造函数没有参数时,称为默认构造函数。

2. 构造函数的定义

构造函数的定义形式如下:

struct 结构体名

{

数据类型 成员变量1;

数据类型 成员变量2;

数据类型 成员变量3;

// ……

// 构造函数

结构体名(参数列表)

{

构造函数体

}

};

例:

struct Person

{

std::string name;

int age;

// 构造函数

Person(std::string n, int a)

{

name = n;

age = a;

}

};

3. 构造函数的作用

构造函数的作用在于创建对象时对其进行初始化。在结构体创建时,将自动调用构造函数对其数据成员进行初始化。例如,上面例子中的Person结构体,对于每个Person对象,都需要提供其姓名和年龄,因此构造函数的参数列表中包含了这两个参数。

构造函数还可以用于初始化指针成员,例如:

struct Student

{

std::string name;

int *pAge;

// 构造函数

Student(std::string n, int a)

{

name = n;

pAge = new int;

*pAge = a;

}

};

在上面的例子中,构造函数使用动态内存分配为pAge指针成员分配内存,并将其初始化为a。

4. 构造函数的继承

当一个结构体继承自另一个结构体时,它需要调用其父类的构造函数来完成继承。在派生类中,构造函数可以通过以下方式调用其父类的构造函数:

struct Base

{

int num;

Base(int n)

{

num = n;

}

};

struct Derived : public Base

{

Derived(int n) : Base(n)

{

}

};

在这个例子中,派生类Derived继承自基类Base。构造函数Derived(int n)中调用了父类Base的构造函数:Base(n)。

5. 析构函数

析构函数是一种特殊的函数,它在结构体变量销毁时被自动调用。它的主要作用是在销毁结构体变量时清理其内存,避免内存泄漏。

6. 析构函数的定义

析构函数的定义形式如下:

struct 结构体名

{

// 析构函数

~结构体名()

{

析构函数体

}

};

例:

struct Student

{

std::string name;

int *pAge;

// 析构函数

~Student()

{

delete pAge;

}

};

在这个例子中,结构体Student中有一个指针成员pAge,它在构造函数中使用了动态内存分配,因此在销毁结构体变量时需要使用析构函数把它释放掉。

7. 总结

结构体的构造函数和析构函数是对结构体进行初始化和清理的重要手段,可以有效避免内存泄漏等问题。构造函数在创建结构体变量时被自动调用,用于初始化数据成员和指针成员;析构函数在销毁结构体变量时被自动调用,用于清理结构体内存。结构体也可以继承构造函数和析构函数,并通过调用基类的构造函数来完成继承。


本文标签: 结构 变量 成员 调用 函数