章节
问答
课签
笔记
评论
占位
占位

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

上一小节,我们介绍了 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 函数就要结束了,这个栈对象就自动销毁了,销毁的时候,就调用了析构函数。

任务

?不会了怎么办
||

提问题

写笔记

公开笔记
提交
||

请验证,完成请求

由于请求次数过多,请先验证,完成再次请求

加群二维码

打开微信扫码自动绑定

您还未绑定服务号

绑定后可得到

  • · 粉丝专属优惠福利
  • · 大咖直播交流干货
  • · 课程更新,问题答复提醒
  • · 账号支付安全提醒

收藏课程后,能更快找到我哦~

使用 Ctrl+D 可将课程添加到书签

举报

0/150
提交
取消
全部 精华 我要发布
全部 我要发布
最热 最新
只看我的

手记推荐

更多

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?