前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【C++面向对象——继承与派生】派生类的应用(头歌实践教学平台习题)【合集】

【C++面向对象——继承与派生】派生类的应用(头歌实践教学平台习题)【合集】

作者头像
Rossy Yan
修改2024-12-26 10:17:34
修改2024-12-26 10:17:34
6200
代码可运行
举报
运行总次数:0
代码可运行

实验目的

  1. 学习声明和使用类的继承关系,声明派生类
  2. 熟悉不同继承方式下对基类成员的访问控制
  3. 学习利用虚基类解决二义性问题

实验任务

参考实验指导书第七章的实验任务4:

  1. 从实验 6 中的 people(人员)类派生出 student (学生)类, 添加属性:班号 char classNO[7];
  2. 从 people 类派生出teacher(教师)类, 添加属性:职务 char principalship[11]、部门 char department[21]。
  3. 从 student 类中派生出 graduate(研究生)类, 添加属性:专业 char subject[21]、导师 teacher adviser;
  4. 从 graduate 类和 teacher 类派生出 TA(助教生)类, 注意虚基类的使用。重载相应的成员函数,测试这些类。

(类之间的关系如下图所示。)

实验步骤

  1. 创建一个教师实例,姓名为Zheng Li,编号为1001,性别为Female,1978年1月1日生,身份证号为1234567890,职务为professor,部门为CST。
  2. 创建一个助教实例,姓名为Li Chao,编号为011401,性别为Male,1988年6月1日生,身份证号为12345619880601,职务为TA,部门为CST,班号为cst61,专业为computer science,导师为Zheng Li。
  3. 依次输出该助教的姓名,编号,部门,班号,专业和导师。

编程要求

根据提示,在右侧编辑器补充代码,并输出正确的值。

测试说明

平台会对你编写的代码进行测试:

预期输出: TA name: Li Chao No.: 011401 Department: CST Class No.: cst61 Subject: computer science Advisor: Zheng Li

开始你的任务吧,祝你成功!


我的通关代码:
代码语言:javascript
代码运行次数:0
复制
#include <iostream>
#include <cstring>
using namespace std;

class Date
{
public:
	int year;
	int month;
	int day;
	Date() {year = 1900; month = 1; day = 1;}
	Date(int y, int m, int d) : year(y), month(m), day(d) {}
//	Date(const Date& b) {year = b.year; month = b.month; day = b.day;}
};

class people
{
	char name[11];
	char number[7];
	char sex[3];
	Date birth;
	char id[16];
public:
	char* getName() {return name;}
	char* getNumber() {return number;}
	char* getSex() {return sex;}
	Date getBirth() {return birth;}
	char* getId() {return id;}
	people() {}
	people(const char* nm, const char* no, const char* gd, Date b, const char* i) : birth(b) {
		strcpy(name, nm);
		strcpy(number, no);
		strcpy(sex, gd);
		strcpy(id, i);
	}
};

class teacher : virtual public people
{
	char principalship[11];
	char department[21];
public:
	char* getPs() {return principalship;}
	char* getDpm() {return department;}
	teacher() {}
	teacher(const char* ps, const char* dpm) {
		strcpy(principalship, ps);
		strcpy(department, dpm);
	}
	teacher(const char* nm, const char* no, const char* gd, Date b, const char* i, const char* ps, const char* dpm) : people(nm, no, gd, b, i) {
		strcpy(principalship, ps);
		strcpy(department, dpm);
	}
};

class student : virtual public people
{
	char classNO[7];
public:
	char* getClassNO() {return classNO;}
	student() {}
	student(const char* cln) {strcpy(classNO, cln);}
	student(const char* nm, const char* no, const char* gd, Date b, const char* i, const char* cln) : people(nm, no, gd, b, i) {
		strcpy(classNO, cln);
	}
};

class graduate : public student
{
	char subject[21];
	teacher adviser;
public:
	char* getSubject() {return subject;}
	teacher getAdviser() {return adviser;}
	graduate() {}
	graduate(const char* sbj, teacher adv) : adviser(adv) {strcpy(subject, sbj);}
	graduate(const char* cln, const char* sbj, teacher adv) : student(cln), adviser(adv) {strcpy(subject, sbj);}
	graduate(const char* nm, const char* no, const char* gd, Date b, const char* i, const char* cln, const char* sbj, teacher adv) : 
        student(nm, no, gd, b, i, cln), adviser(adv) {strcpy(subject, sbj);}
};

class TA : public graduate, public teacher
{
public:
	TA() {}
	TA(const char* nm, const char* no, const char* gd, Date b, const char* i, const char* ps, const char* dpm, const char* cln, const char* sbj, teacher adv) : 
        people(nm, no, gd, b, i), teacher(ps, dpm), graduate(cln, sbj, adv) {}
};

int main()
{
	/********** Begin **********/
    teacher ad("Zheng Li","1001","Female",Date(1978,1,1),"1234567890","professor","CST");
    TA ta ("Li Chao","011401","Male",Date(1988,6,1),"12345619880601","TA","CST","cst61","computer science",ad);
    /********** End **********/
	cout << "TA name: " << ta.getName() << endl;
	cout << "No.: " << ta.getNumber() << endl;
	cout << "Department: " << ta.getDpm() << endl;
	cout << "Class No.: " << ta.getClassNO() << endl;
	cout << "Subject: " << ta.getSubject() << endl;
	cout << "Advisor: " << ad.getName() << endl;
	return 0;
}

测试结果:
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实验目的
  • 实验任务
  • 实验步骤
  • 编程要求
  • 测试说明
    • 我的通关代码:
    • 测试结果:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档