4-6 招聘员工和开除员工:构造函数和析构函数
本节编程练习不计算学习进度,请电脑登录imooc.com操作

招聘员工和开除员工:构造函数和析构函数

上一小节,我们介绍了 C++ 中的成员函数,我们这一小节来介绍两个特殊的成员函数,构造函数和析构函数。

构造函数

我们先来看看构造函数

#include <string>

class Staff
{
public:
    Staff();
};

可以看到,这里定义了一个和名称和类名相同,没有返回值的函数,这个函数称为构造函数。构造函数的特殊之处在于,他会在类实例化的时候被调用。

我们先实现一下这个函数,在函数中打印一行:

#include "Staff.hpp"
#include <stdio.h>

Staff::Staff()
{
    printf("构造函数被调用\n");
}

然后在 main 中调用一下:

#include <stdio.h>

#include "Staff.hpp"

int main(int argc,char **argv)
{
    Staff staff1;

    return 0;
}

运行的时候,可以看到,刚刚的那条打印语句被运行了。

此外,构造函数是可以有参数的,我们常常用构造函数来进行初始化。例如,我们可以利用构造函数对 name 和 age 进行传值。

Staff.hpp

#include <string>

class Staff
{
public:
    Staff(std::string _name, int _age);

public:
    std::string name;
    int age;
};

Staff.cpp

#include "Staff.hpp"
#include <stdio.h>

Staff::Staff(std::string _name, int _age)
{
    name = _name;
    age = _age;
}

当然,对于有参数的构造函数,调用的时候只要传进去参数就行了。现在,我们可以创建一个名叫 “mooc”,29 岁的员工了。

#include <stdio.h>

#include "Staff.hpp"

int main(int argc,char **argv)
{
    Staff staff("mooc", 29);

    return 0;
}

析构函数

对象实例化的时候,会调用构造函数,而对象销毁的时候,就会调用析构函数。我们先来尝试写一个析构函数:

Staff.hpp

#include <string>

class Staff
{
public:
    Staff(std::string _name, int _age);
    ~Staff();

public:
    std::string name;
    int age;
};

Staff.cpp

#include "Staff.hpp"
#include <stdio.h>

Staff::Staff(std::string _name, int _age)
{
    name = _name;
    age = _age;
    printf("构造函数被调用\n");
}

Staff::~Staff()
{
    printf("析构函数被调用\n");
}

调用代码不改,然后再运行一下。我们发现,程序在调用了构造函数之后,又调用了析构函数。

我们之前讲过栈内存,这个对象是分配在栈上面的,实例化的时候,调用了构造函数,而紧接着,main 函数就要结束了,这个栈对象就自动销毁了,销毁的时候,就调用了析构函数。

任务

  1.  
下一节