MST
星途 面试题库

面试题:C++中类与对象关系及设计原则之构造函数与析构函数

在C++中,已知一个类`Student`,包含姓名、年龄等成员变量。请阐述构造函数和析构函数在类与对象关系中的作用,并编写该类的构造函数和析构函数代码,说明在对象创建和销毁过程中它们是如何工作的。
35.1万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

构造函数和析构函数的作用

  1. 构造函数的作用 构造函数是类中的一种特殊成员函数,其名称与类名相同。它的主要作用是在创建对象时初始化对象的成员变量。通过构造函数,可以为对象的各个成员变量赋初值,确保对象在创建后就处于一个有效的状态。例如,对于Student类,构造函数可以用来初始化姓名和年龄等成员变量。

  2. 析构函数的作用 析构函数也是类中的特殊成员函数,其名称为类名前加波浪号~。它的作用是在对象销毁时进行清理工作。比如,当对象占用了动态分配的内存(如使用new分配的内存),析构函数可以释放这些资源,防止内存泄漏。对于Student类,如果有动态分配的资源(如动态分配的字符串用于存储姓名),析构函数就可以释放这些资源。

代码示例

#include <iostream>
#include <cstring>

class Student {
private:
    char *name;
    int age;
public:
    // 构造函数
    Student(const char *n, int a) {
        name = new char[strlen(n) + 1];
        strcpy(name, n);
        age = a;
        std::cout << "Student object created: " << name << ", " << age << std::endl;
    }

    // 析构函数
    ~Student() {
        delete[] name;
        std::cout << "Student object destroyed: " << name << ", " << age << std::endl;
    }
};

对象创建和销毁过程中构造函数和析构函数的工作方式

  1. 对象创建过程 当使用Student s("Alice", 20);这样的语句创建一个Student对象时,构造函数会被自动调用。首先,为对象分配内存空间,然后执行构造函数中的代码。在上述代码中,构造函数动态分配内存用于存储姓名,然后将传入的姓名和年龄赋值给相应的成员变量,并输出创建信息。

  2. 对象销毁过程 当对象的生命周期结束时(例如函数结束,对象是局部变量;或者使用delete释放动态分配的对象),析构函数会被自动调用。在上述代码中,析构函数首先释放动态分配的用于存储姓名的内存,然后输出销毁信息。如果没有正确编写析构函数,动态分配的内存就无法释放,导致内存泄漏。