【C++实验任务3】 people组合类的构造与析构函数调用【详解】

题目:

设计一个用于人事管理的People(人员)类。考虑到通用性,这里只抽象出所有类型人员都具有的属性:number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)等。其中,"出生日期"声明为一个"日期"类内嵌子对象。用成员函数实现对人员信息的录人和显示。要求包括:构造函数和析构函数、复制构造函数、内联成员函数、组合。

知识点:

构造

1.调用date构造函数创建一个date类的对象

2.调用date复制构造函数将前面创建的date对象复制并且作为形式参数传给people类的构造函数

3.在people类的构造函数的初始化列表中,用传进来的date类b去初始化birthday对象,这一步初始化还要调用date类的复制构造函数,去创建这个成员birthday

4.执行people类的构造函数内的函数体

析构

1.创建people类时进行形参与实参结合时所调用复制构造函数创建的date类被析构,因为生存期是函数体内

2.程序结束,people类先被析构

people类的析构函数没有显式的调用date类的析构,所以程序会自行调用

3.在people类的构造函数内调用的date复制构造函数出来的对象(也就是people类的date类成员)被析构

(这里注意是先调用组合类的析构函数,再调用组合类内其他类的析构函数)

4.最开始创建的date类被析构

代码:

cpp 复制代码
//实验任务3_people组合类
#include<iostream>
#include<string>
using namespace std;
// date类
class date {
private:
	int year;
	int month;
	int day;
public:
	date(int y, int m, int d);
	date(date& d);
	~date();
	void get();
};
// 构造函数
date::date(int y, int m, int d) {
	year = y;
	month = m;
	day = d;
	cout << "调用date构造函数" << endl;
}
// 复制构造函数
date::date(date& d) {
	year = d.year;
	month = d.month;
	day = d.day;
	cout << "调用date复制构造函数" << endl;

}
// 析构函数
date::~date() {
	cout << "date类 被析构" << endl;
}
//获取信息
void date::get() {
	cout << "date:" << year << ' ' << month << ' ' << day << endl;
}
// people类 组合类
class people {
private:
	int number;
	string sex;
	date birthday;
	string id;
public:
	people(int n, string s, date b, string i);
	people(people& p);
	void getpeople();
	~people() {
		cout << "people类 被析构" << endl;
	}
};
// 构造函数
people::people(int n, string s, date b, string i) : number(n), sex(s), birthday(b), id(i) {
	cout << "调用people构造函数" << endl;
}
//复制构造函数
people::people(people& p) : birthday(p.birthday) {
	number = p.number;
	sex = p.sex;
	id = p.id;
	cout << "调用people复制构造函数" << endl;
}
//获取信息
void people::getpeople() {
	cout << "number:" << number << endl;
	cout << "sex: " << sex << endl;
	birthday.get();
	cout << "id:" << id << endl;
}
//主函数
int main() {
	int the_number;
	string the_sex, the_id;
	int year, month, day;

	cout << "输入编号和性别" << endl;
	cin >> the_number >> the_sex;
	cout << "输入身份证号" << endl;
	cin >> the_id;
	cout << "请输入生日年月日" << endl;
	cin >> year >> month >> day;

	date the_birthday(year, month, day);
	people the_people(the_number, the_sex, the_birthday, the_id);
	the_people.getpeople();
	return 0;
}

输出:

cpp 复制代码
输入编号和性别
1 女
输入身份证号
123456
请输入生日年月日
1000 10 10

调用date构造函数
调用date复制构造函数
调用date复制构造函数
调用people构造函数
date类 被析构
number:1
sex: 女
date:1000 10 10
id:123456
people类 被析构
date类 被析构
date类 被析构
相关推荐
云和数据.ChenGuang1 小时前
LangGraph 异步 Node 的设计与写法实践
开发语言·人工智能·python·机器学习·php
WL学习笔记2 小时前
vector模拟实现
c++
蜗牛一步步往上爬4 小时前
第十六章 C++语言在深度学习中的应用
开发语言·c++·深度学习
张张123y6 小时前
DSH 插件调试避坑:client.js 设置面板、热重载与高频报错排查表
开发语言·javascript·人工智能·开源·ecmascript·后端开发·ai agent
wo_jack8 小时前
C++ 入门笔记(十六):第16课 vector 模拟实现十问十答 —— 从三指针到迭代器失效
c++·后端·面试·stl·vector
D e re k ZH8 小时前
C++ 标准库算法全景指南
数据结构·c++·算法
冻柠檬飞冰走茶9 小时前
字母移动游戏题解:贪心求最长可保留连续子串(附 C 实现)
c语言·开发语言·数据结构·算法·动态规划
FRing0310 小时前
vue2干货总结7(自定义指令、插槽、单页应用程序、路由的使用(VueRouter))
开发语言·前端·vue.js·vue2
雪落漂泊10 小时前
C++算法 二分查找篇(上)
开发语言·c++·算法
波力海苔夹心脆67511 小时前
C# WPF 资源字典详解:ResourceDictionary、MergedDictionaries 与自定义控件案例
开发语言·c#·wpf·入门教程·resource·资源字典