设计一个用于人事管理的人员类,由于考虑到通用性,这里只抽象出所有类型人员都具有的属性:编号,姓名,性别,出生日期,身份证号等。其中出生日期定义为一个日期类内嵌子对象。用成员函数实现对人员信息的初始化和显示。要求包括:构造函数和析构函数,复制构造函数,内联成员函数,带默认形参值的成员函数,类的组合
时间: 2023-06-15 17:06:01 浏览: 546
以下是一个可能的实现:
```c++
#include <iostream>
#include <string>
using namespace std;
class Date {
private:
int year, month, day;
public:
Date(int y = 0, int m = 0, int d = 0): year(y), month(m), day(d) {}
void set(int y, int m, int d) { year = y; month = m; day = d; }
void display() const { cout << year << "-" << month << "-" << day << endl; }
};
class Person {
private:
int id;
string name;
char gender;
string idNumber;
Date birthday;
public:
Person(int i = 0, const string& n = "", char g = 'M', const string& idn = "", const Date& b = Date()): id(i), name(n), gender(g), idNumber(idn), birthday(b) {}
Person(const Person& p): id(p.id), name(p.name), gender(p.gender), idNumber(p.idNumber), birthday(p.birthday) {}
~Person() {}
void setId(int i) { id = i; }
void setName(const string& n) { name = n; }
void setGender(char g) { gender = g; }
void setIdNumber(const string& idn) { idNumber = idn; }
void setBirthday(int y, int m, int d) { birthday.set(y, m, d); }
void display() const {
cout << "ID: " << id << endl;
cout << "Name: " << name << endl;
cout << "Gender: " << gender << endl;
cout << "ID number: " << idNumber << endl;
cout << "Birthday: ";
birthday.display();
}
};
int main() {
Person p(1, "Tom", 'M', "123456789012345678", Date(2000, 1, 1));
p.display();
return 0;
}
```
在这个实现中,我们用了一个内嵌类 `Date` 来封装出生日期,这个类包含了年、月、日三个成员变量和三个成员函数,用于初始化、修改和显示日期。`Person` 类包含了编号、姓名、性别、身份证号和出生日期等五个成员变量,以及构造函数、析构函数、复制构造函数和一些用于初始化和显示信息的成员函数。我们还可以添加其他的成员函数,如计算年龄、计算星座等。在 `main` 函数中,我们创建了一个 `Person` 对象,并调用其 `display` 函数显示信息。需要注意的是,由于 `Date` 类的显示函数是 `const` 成员函数,因此在 `Person` 类的 `display` 函数中需要使用 `const` 限定符。
阅读全文