物联网/嵌入式工程师
重磅升级:新增硬件电路设计与实战,让你软硬通吃,同级PK无敌!行业风口、政策倾斜,新晋热门高薪不内卷!0基础一站式就业完整路径,抢占先发优势!
上一小节,我们介绍了 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 可将课程添加到书签
举报