一、实验目的
1、 掌握类继承与派生关系以及实现方法,理解类的层次结构;
2、 掌握派生类构造函数初始化基类成员和对象成员的方法;
3、 掌握类型兼容规则,掌握派生类的复制构造函数的定义。
4、 掌握多重继承和虚基类。
二.一个用于人事管理的类族。
⑴设计一个用于人事管理的“People(人员类)”基类。考虑到通用性,仅抽象出各类人员都具有的属性:编号、姓名·、性别、出生日期、身份证号等;
⑵从People(人员类)派生出Student(学生类),并添加属性:班号classNO;
⑶从People类派生出Teacher(教师类),并添加属性:职务principalship、部门department;
⑷从Student类中派生出Graduate(研究生)类,并添加属性:专业subject、导师adviser(该属性是Teacher类对象);
⑸从Graduate类和Teacher类派生出助教生类TA,无新的属性。设计该类时注意虚基类的使用,注意重载相应的成员函数。
⑹编写main函数测试这些类。在main函数中设计测试用例时,注意考虑如何体现成员函数的覆盖。
编程要求:
⑴本程序必须建立工程。
⑵将上述5个类的定义部分分别作为5个头文件(.h文件),对5个类的实现部分分别作为5个源文件(.cpp文件),在main函数中用#include命令把它们包含进来,形成一个完整的程序。
这是我第一次编工程呢,过程可是艰辛,废话不多说,我用的软件是Devc++,下面把在其中如何做工程的方法罗列出来
首先:

再就是
然后就会出现这个


这是总的结果

//main.cpp
#include<iostream>
#include"Date.h"
#include"Person.h"
#include"Student.h"
#include"Teacher.h"
#include"Graduate.h"
#include"TA.h"
#include<string>
using namespace std;
int main()
{Date d1(2001,4,2),d2(1985,4,9); Person p1(201907152052,"小明","man","4209222012342626",d1);Person p2(2019071520523,"李华","man","420922220000427362",d2);Student s(p1,"1902");Teacher t(p2,"英语老师","英语部");Graduate G(s,"计算机科学与技术",t);TA T(G,t);cout<<"………………………………………………………………………………………………";cout<<"基类信息:"<<endl;p1.show();cout<<"………………………………………………………………………………………………" ;cout<<"学生类:"<<endl;s.show();cout<<"………………………………………………………………………………………………"<<endl;s.Person::show();//表示同名的覆盖!cout<<"………………………………………………………………………………………………" ;cout<<"老师类:"<<endl;t.show() ;cout<<"………………………………………………………………………………………………" ;cout<<"研究生类:"<<endl;G.show() ;cout<<"………………………………………………………………………………………………" ;cout<<"TA类:"<<endl;T.show();cout<<"………………………………………………………………………………………………" ;return 0;
}
//Date.h
#ifndef _DATE_H_
#define _DATE_H_
class Date//Date类
{public:Date(int y=2001,int m=4,int d=2);//有参构造与默认构造和一 Date( const Date &D);//复制构造 void getin();//设置时间 void show();//展示时间 ~Date(){} //析构函数 private:int year,month,day;
};
#endif
//Date.cpp
#include"Date.h"
#include<iostream>
using namespace std;
Date::Date(int y,int m,int d):year(y),month(m),day(d)//初始化区域
{}
inline void Date:: getin()
{cin>>year>>month>>day;
}
void Date::show()
{cout<<"出生日期:"<<year<<"-"<<month<<"-"<<day<<endl;
}
Date::Date(const Date &D):year(D.year),month(D.month),day(D.day)//只要是构造函数都可以,但是普通得成员函数不可以
{}
//Person.h
#ifndef _PERSON_H_
#define _PERSON_H_
#include"Date.h"//编号、姓名、性别、出生日期、身份证号等;
#include<string>
using namespace std;
class Person
{public:Person(long long number, const string &name, const  string& sex, const string &idcard,const Date& date);//默认构造最好用cosnt Person(const Person&P);void show();~Person(){}//析构函数的大括号千万不能忘 protected:long long  p_number;//编号 string p_name;//姓名 string p_sex;//性别 string p_idcard;//身份证号 Date p_date;    //内嵌对象   };
#endif
//Person.cpp
#include "Person.h"//要包含要用到的.h文件
#include<iostream>
#include"Date.h"
#include<string>
using namespace std;
Person::Person(long long number, const string &name, const string &sex,const string& idcard,const Date &date):p_number(number),p_name(name),p_sex(sex),p_idcard(idcard),p_date(date)
{}
Person::Person(const Person&P): p_number(P.p_number),p_name(P.p_name),p_sex(P.p_sex),p_idcard(P.p_idcard),p_date(P.p_date)
{}
void Person::show()
{cout<<"编号:"<<p_number<<endl;cout<<"姓名:"<<p_name<<endl;cout<<"性别:"<<p_sex<<endl;cout<<"身份证号:"<<p_idcard<<endl;p_date.show();
}
//Student.h
#ifndef _STUDENT_H_
#define _STUDENT_H_
#include"Person.h"
class Student: virtual public Person//虚基类继承
{public:Student(const Person &P, const string &classNO);//用引用来做参数 构造函数Student(const Student&S);void show(); ~Student(){}protected:string s_classNO;
};
#endif
//Student.cpp
#include<cstring>
#include"Person.h"
#include"student.h"
#include<iostream>
using namespace std;
Student::Student(const Person &P,  const string &classNO):Person(P),s_classNO(classNO)
{}
Student::Student(const Student &S1):Person(S1),s_classNO(S1.s_classNO)
{}
void Student::show()
{Person::show();cout<<"班号:"<<s_classNO<<endl;
}
//Teacher.h
#include<string>
#ifndef _TEACHER_H_
#define _TEACHER_H_
#include"Person.h"//职务principalship、部门department;
class Teacher: virtual public Person
{public:Teacher( const Person&p,const string &principalship, const string &department);Teacher(const Teacher&T);void show();~Teacher(){}protected:string T_principalship;string T_department;
};
#endif
//Teacher.cpp
#include<string>
#include<iostream>
#include"Person.h"
#include"Teacher.h"
using namespace std;
Teacher::Teacher(const Person&p, const  string &principalship,  const string &department):Person(p),T_principalship(principalship),T_department(department)
{}
Teacher::Teacher(const Teacher&T):Person(T),T_principalship(T.T_principalship),T_department(T.T_department)
{}
void Teacher::show()
{Person::show();cout<<"职务:"<<T_principalship<<endl;cout<<"部门:"<<T_department<<endl;
}
//Graduate.h
#ifndef _GRADUATE_H_
#define _GRADUATE_H_
#include"Student.h"
#include"Teacher.h"
#include<string>
using namespace std;
// //专业subject、导师adviser
class Graduate:public Student
{public:Graduate( const Student &S1, const string &subject,const Teacher &T);Graduate(const Graduate&G);void show();~Graduate(){}protected:string G_subject;Teacher G_adviser;
};
#endif
//Graduate.cpp
#include<string>
#include<iostream>
#include"Student.h"
#include"Graduate.h"
using namespace std;
Graduate::Graduate(const Student &S1,const string &subject,  const Teacher &T):Person(S1),Student(S1),G_adviser(T),G_subject(subject)
{}
Graduate::Graduate(const Graduate&G):Person(G),Student(G),G_adviser(G.G_adviser),G_subject(G.G_subject)
{}
void Graduate::show()
{Student::show();cout<<"项目:"<<G_subject<<endl;cout<<"导师:"<<endl;G_adviser.show();
}
//TA.h
#ifndef _TA_H_
#define _TA_H_
#include"Graduate.h"
#include"Teacher.h"
class TA:  public Graduate, public Teacher
{public:TA(const Graduate&g, const Teacher&t);TA(const TA&T);void show();~TA(){}
};
#endif
//TA.cpp
#include<iostream>
#include"Graduate.h"
#include"Teacher.h"
#include"TA.h"
using namespace std;
TA::TA(const Graduate&g, const Teacher&t):Person(g),Graduate(g),Teacher(t){}
TA::TA(const TA&T):Person(T),Graduate(T),Teacher(T){}
void TA::show()
{Graduate::show();
}

c++实验三:继承与派生相关推荐

  1. 【C++】实验七 继承与派生

    文章目录 实验七(第八章)实践题一 实验七(第八章) 实践题二 实验七(第八章) 实践题三 实验七(第八章)实践题一 对本章示范题的用于管理商店商品的实现程序进行完善:完成Wardrobe立柜类的具体 ...

  2. 实验四---继承与派生练习以及运算符[ ]重载练习

    1. 车辆基本信息管理 问题场景描述如下: 为了对车量基本信息进行管理,对现实世界车量基本信息抽象后,抽象出Car类.ElectricCar类.Battery类, 它们之间的关系描述如下:基于Car类 ...

  3. 实验四 类和对象;类的继承和派生;多态性; 接口;构造器应用

    实验四 类和对象:类的继承和派生:多态性: 接口:构造器应用 一.实验目的 1. 掌握类与对象的关系: 2. 掌握类的定义: 3. 掌握对象的声明及使用: 4. 掌握构造方法的概念及调用时机: 5. ...

  4. 实验三 类的继承和多态性

    实验三 类的继承和多态性 1.(1)编写一个接口ShapePara,要求: 接口中的方法: int getArea():获得图形的面积.int getCircumference():获得图形的周长 ( ...

  5. 实验四:继承性和派生类 建一个楼房Building为基类,建立住宅类House继承Building,存储房号和面积,建立办公室类Office继承Building,存储办公室名称和电话

    /* * 实验四:继承性和派生类 * 内容提要:建立一个楼房基类Building为基类,用于存储地址和楼号 * 建立住宅类House继承Building, 用来存储房号和面积, * 另外建立办公室类O ...

  6. 程序设计与算法三~C++面向对象程序设计~北大郭炜MOOC学习笔记~第五章:继承与派生(新标准C++程序设计)

    以下内容为笔者手打,望读者珍惜,如有转载还请注明. 第五章 继承与派生 $5.1 继承与派生的概念 $5.1.1 基本概念     在C++中,当定义一个新的类B时,如果发现类B拥有某个已经写好的类A ...

  7. Java模式设计卖电脑实验报告,面向对象(Java)实验0继承、接口和多态

    <面向对象(Java)实验0继承.接口和多态>由会员分享,可在线阅读,更多相关<面向对象(Java)实验0继承.接口和多态(11页珍藏版)>请在金锄头文库上搜索. 1.电子信息 ...

  8. 【实验报告】实验五 继承的应用

    实验五 继承的应用 一. 实验目的 (1) 理解继承与派生的概念.派生类的编程与应用. (2) 理解类的继承与派生机制,掌握三种继承方式对类成员访问属性的影响,可进行简单编程. (3) 掌握继承和运算 ...

  9. python基础——继承与派生、组合

    python基础--继承与派生 1 什么是继承: 继承是一种创建新的类的方式,在python中,新建的类可以继承自一个或者多个父类,原始类成为基类或超累,新建的类成为派生类或子类 1.1 继承分为:单 ...

最新文章

  1. 查看 Android SDK Build-tools 版本号
  2. Java循环案例-银行存钱问题
  3. NLP jieba分词源码解析
  4. 如何打开.mmap查看的问题
  5. hive一次加载多个文件_0738-6.2.0-如何在Hive中使用多分隔符
  6. 21 Fragment和短语法应用
  7. CTS(8)---Android Google认证 -CTS认证问题小结
  8. 对话罗伟:5G背景下 物联网领域最大挑战在于商业模式
  9. [3G/4G]3G/4G模块开发
  10. git上传项目 openssh_GitHub上传项目
  11. C/C++ 活动预处理器
  12. 自动控制原理 (二): 控制系统的微分方程
  13. 电容式触摸按键原理调研总结
  14. 阿里云服务器搭建 图文详细教程
  15. 谈老人机却不是老人机
  16. 数据库管理工具——SQuirreL SQL Client使用入门
  17. Win11 22000.918(KB5016691)正式版发布,解决一系列问题!
  18. kali怎么新建文本_教你如何在linux终端创建文件
  19. linux下 eps怎么打开方式,eps文件怎么用ps打开
  20. python15(数值计算扩展numpy和数据分析pandas)

热门文章

  1. 关于富斯遥控器5号电池改锂电的问题探究
  2. 关于前端页面展示图片展示时改变方向的解决办法
  3. 从零开始安装ubuntu22.04并搭建远程深度学习环境
  4. vue+swiper4+js实现滑动的筋斗云效果
  5. Selenium page_load_strategy设置页面加载策略
  6. 貌似高大上,实则黑中介
  7. 我的世界java蜜蜂_在最新的《我的世界》Java版更新中 蜜蜂是所有的热点
  8. word显示隐藏格式清除残留格式
  9. JavaEE(10)Spring中的注解开发、静态/动态代理
  10. python数据分析实战之阿里巴巴股票行情分析