编写一个程序包括:设计人员类Person和日期类date,人员类派生出学生类Student和教师类Teacher。 1.教师类包含姓名、生日、ID、专业、所属机构 2.学生类包含姓名、ID、成绩、生日 3.教师类与学生类的数据成员birthday (生日)为日期类的对象 4.文字说明创建学生类对象时,构造函数的调用顺序,以及程序运行结束时析构函数的调用顺序。
时间: 2024-03-09 14:44:46 浏览: 51
好的,我可以为您编写这个程序。以下是完整的程序代码:
```c++
#include <iostream>
#include <string>
using namespace std;
// 日期类
class Date {
private:
int year;
int month;
int day;
public:
Date(int y, int m, int d) : year(y), month(m), day(d) {}
void showDate() {
cout << year << "-" << month << "-" << day << endl;
}
};
// 人员类 Person
class Person {
private:
string name;
Date birthday;
public:
Person(string n, int y, int m, int d) : name(n), birthday(y, m, d) {}
void showInfo() {
cout << "姓名:" << name << endl;
cout << "生日:";
birthday.showDate();
}
};
// 学生类 Student
class Student : public Person {
private:
int id;
double score;
public:
Student(string n, int y, int m, int d, int i, double s) : Person(n, y, m, d), id(i), score(s) {}
void showInfo() {
Person::showInfo();
cout << "学号:" << id << endl;
cout << "成绩:" << score << endl;
}
};
// 教师类 Teacher
class Teacher : public Person {
private:
int id;
string major;
string organization;
public:
Teacher(string n, int y, int m, int d, int i, string mjr, string org) : Person(n, y, m, d), id(i), major(mjr), organization(org) {}
void showInfo() {
Person::showInfo();
cout << "工号:" << id << endl;
cout << "专业:" << major << endl;
cout << "机构:" << organization << endl;
}
};
int main() {
// 创建一个学生对象
Student stu("小明", 2000, 1, 1, 1001, 90.5);
cout << "创建学生对象时,构造函数的调用顺序:" << endl;
stu.showInfo();
// 创建一个教师对象
Teacher tea("张老师", 1980, 3, 18, 2001, "计算机科学", "XX大学");
cout << endl << "创建教师对象时,构造函数的调用顺序:" << endl;
tea.showInfo();
return 0;
}
```
程序中定义了日期类 `Date`,人员类 `Person`,学生类 `Student` 和教师类 `Teacher`。在 `Person` 类中定义了姓名和生日两个数据成员,并在构造函数中初始化 `birthday` 为日期类对象。在 `Student` 和 `Teacher` 类中分别定义了学号和成绩、工号和专业、机构等数据成员,并在构造函数中调用 `Person` 类的构造函数初始化姓名和生日。
在主函数中,创建了一个学生对象 `stu` 和一个教师对象 `tea`,并调用了它们的 `showInfo()` 函数来输出对象的信息。同时,程序也回答了您之前的问题:创建学生类对象时,构造函数的调用顺序是先调用基类 `Person` 的构造函数,再调用派生类 `Student` 的构造函数;程序运行结束时析构函数的调用顺序是先调用派生类 `Student` 的析构函数,再调用基类 `Person` 的析构函数。
阅读全文