设计一个用于人事管理的People(人员)类。考虑到通用性,只抽象出所有类型人员都具有的属性:number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)、ntotalnumber(人员总数)。其中“人员总数”用静态成员变量表示,并用一个静态成员函数输出总人数;“出生日期”声明为一个“日期类(calendar)”成员对象,作为People(人员)类的封闭类对象。用成员函数实现对人信息的录入和显示。要求包括:构造函数和析构函数、复制构造函数、内敛成员函数、静态成员函数。
时间: 2023-05-28 11:02:33 浏览: 154
日期类(calendar)的具体实现可以根据需要自行定义,这里不赘述。
下面是People(人员)类的实现:
```
#include <iostream>
#include <string>
using namespace std;
// 日期类
class calendar {
public:
calendar(int year = 0, int month = 0, int day = 0) {
m_year = year;
m_month = month;
m_day = day;
}
void output() const {
cout << m_year << '/' << m_month << '/' << m_day;
}
private:
int m_year, m_month, m_day;
};
// 人员类
class People {
public:
// 构造函数
People(int number = 0, char sex = ' ', calendar birthday = calendar(), string id = "")
: m_number(number), m_sex(sex), m_birthday(birthday), m_id(id) {
++s_ntotalnumber; // 总人数加1
}
// 复制构造函数
People(const People& p) {
m_number = p.m_number;
m_sex = p.m_sex;
m_birthday = p.m_birthday;
m_id = p.m_id;
++s_ntotalnumber; // 总人数加1
}
// 析构函数
~People() {
--s_ntotalnumber; // 总人数减1
}
// 设置人员信息
void setInfo(int number, char sex, calendar birthday, string id) {
m_number = number;
m_sex = sex;
m_birthday = birthday;
m_id = id;
++s_ntotalnumber; // 总人数加1
}
// 显示人员信息
void showInfo() const {
cout << "编号: " << m_number << endl;
cout << "性别: " << m_sex << endl;
cout << "出生日期: ";
m_birthday.output();
cout << endl;
cout << "身份证号: " << m_id << endl;
}
// 静态成员函数,输出总人数
static void showTotalNumber() {
cout << "总人数为: " << s_ntotalnumber << endl;
}
private:
int m_number; // 编号
char m_sex; // 性别
calendar m_birthday; // 出生日期
string m_id; // 身份证号
static int s_ntotalnumber; // 总人数(静态成员变量)
};
// 静态成员变量初始化
int People::s_ntotalnumber = 0;
int main() {
People p1(1, 'M', calendar(2000, 1, 1), "111111111111111111");
People p2(2, 'F', calendar(2001, 2, 2), "222222222222222222");
People p3(p1); // 复制构造函数
p1.showInfo();
p2.showInfo();
p3.showInfo();
People::showTotalNumber(); // 调用静态成员函数
return 0;
}
```
运行结果:
```
编号: 1
性别: M
出生日期: 2000/1/1
身份证号: 111111111111111111
编号: 2
性别: F
出生日期: 2001/2/2
身份证号: 222222222222222222
编号: 1
性别: M
出生日期: 2000/1/1
身份证号: 111111111111111111
总人数为: 3
```
阅读全文