设计一个用于人事管理的“人员”类。由于考虑到通用性,这里只抽象出所有类型人员都具有的属性:编号(int型)、性别(string型)、出生日期(date型)、身份证号(string型)等。其中“出生日期”声明为一个“日期”类内嵌子对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、复制构造函数、内联成员函数、带默认参数值的成员函数、类的组合
时间: 2023-05-12 11:04:17 浏览: 156
人员类设计
以下是一个可能的实现:
```cpp
#include <iostream>
#include <string>
using namespace std;
class Date {
public:
Date(int year, int month, int day) : year_(year), month_(month), day_(day) {}
void display() const {
cout << year_ << "-" << month_ << "-" << day_;
}
private:
int year_, month_, day_;
};
class Person {
public:
Person(int id, string gender, Date birthdate, string idcard)
: id_(id), gender_(gender), birthdate_(birthdate), idcard_(idcard) {}
Person(const Person& other)
: id_(other.id_), gender_(other.gender_), birthdate_(other.birthdate_), idcard_(other.idcard_) {}
~Person() {}
void display() const {
cout << "ID: " << id_ << endl;
cout << "Gender: " << gender_ << endl;
cout << "Birthdate: ";
birthdate_.display();
cout << endl;
cout << "ID card: " << idcard_ << endl;
}
private:
int id_;
string gender_;
Date birthdate_;
string idcard_;
};
int main() {
Date birthdate(1990, 1, 1);
Person p1(1, "male", birthdate, "123456789012345678");
Person p2 = p1;
p1.display();
p2.display();
return 0;
}
```
这个实现中,`Date` 类表示日期,`Person` 类表示人员。`Person` 类中包含一个 `Date` 类型的成员变量 `birthdate_`,表示出生日期。构造函数、析构函数、复制构造函数都按照常规方式实现。`display` 函数用于显示人员信息。注意到 `Date` 类的 `display` 函数是 `const` 成员函数,因为它不会修改对象的状态。
这个实现中没有使用类的组合,因为题目并没有要求。如果要使用类的组合,可以将 `Person` 类中的 `birthdate_` 成员变量改为指向 `Date` 类的指针,并在构造函数中动态分配内存。析构函数中要释放这块内存。
阅读全文