Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C++继承和派生练习(一)--关于从people(人员)类派生出student(学生)类等

C++继承和派生练习(一)--关于从people(人员)类派生出student(学生)类等

作者头像
Enterprise_
发布于 2019-03-01 01:38:29
发布于 2019-03-01 01:38:29
1.1K00
代码可运行
举报
文章被收录于专栏:小L的魔法馆小L的魔法馆
运行总次数:0
代码可运行
  1. 从people(人员)类派生出student(学生)类 添加属性:班号char classNO[7];从people类派生出teacher(教师)类, 添加属性:职务char principalship[11]、部门char department[21]。 从student类中派生graduate(研究生)类,添加属性:专业char subject[21]、 导师char teacher_adviser[21];从graduate类和teacher类派生出TA(助教生)类, 注意虚基类的使用。重载相应的成员函数,测试这些类。
  2. 代码如下:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
#include<cstdlib>
using namespace std;
class Data {
public:
    Data() {}
    Data(int yy, int mm, int dd);
    Data(Data &ap);
    ~Data();
    int get_year();
    int get_month();
    int get_day();
    void set_year(int y);
    void set_month(int m);
    void set_day(int d);
private:
    int year;
    int month;
    int day;
};
Data::Data(int yy, int mm, int dd) {
    year = yy;
    month = mm;
    day = dd;
}
Data::Data(Data &ap) {
    year = ap.year;
    month = ap.month;
    day = ap.day;
}
Data::~Data() {

}
int Data::get_day() {
    return day;
}
int Data::get_month() {
    return month;
}
int Data::get_year() {
    return year;
}
void Data::set_day(int d) {
    day = d;
}
void Data::set_month(int m) {
    month = m;
}
void Data::set_year(int y) {
    year = y;
}
class People {
public:
    People(int num, string se, Data birthd, string iid);
    People(People &tp);
    People() {}
    People get_People();
    ~People() {

    }
    void set_number(int num) {
        number = num;
    }
    void set_sex(string se) {
        sex = se;
    }
    void set_birthday(Data birth) {
        birthday = birth;
    }
    void set_id(string iidd) {
        id = iidd;
    }
    int get_number();
    string get_sex();
    Data get_birthday();
    string get_id();
    void details();
private:
    int number;
    string sex;
    Data birthday;
    string id;
};
inline int People::get_number() {
    return number;
}
inline string People::get_sex() {
    return sex;
}
inline string People::get_id() {
    return id;
}
Data People::get_birthday() {
    return birthday;
}
void People::details() {
    cout << "Number:" << number << endl;
    cout << "Sex:" << sex << endl;
    cout << "Birhtday:" << birthday.get_year() << "/" << birthday.get_month() << "/" << birthday.get_day() << endl;
    cout << "ID:" << id << endl;
}
People::People(int num, string se, Data birth, string iid) :birthday(birth) {
    number = num;
    sex = se;
    id = iid;
}
People People::get_People() {
    int num, yy, mm, dd;
    string ID, se;
    cout << "Please enter the number of the people:";
    cin >> num;
    cout << "Please enter the sex of the people:(male or female)";
    cin >> se;
    cout << "Please enter the birthday of the people:" << endl
        << "(Warnning:The format is similar to 1998 8 3)" << endl;
    cin >> yy >> mm >> dd;
    cout << "Please enter the id of the people:";
    cin >> ID;
    Data birth(yy, mm, dd);
    id = ID;
    number = num;
    sex = se;
    birthday = birth;
    return *this;
}
People::People(People &tp) {
    number = tp.get_number();
    sex = tp.get_sex();
    id = tp.get_id();
    birthday = tp.get_birthday();
}
class Student :virtual public People {
public:
    char classNo[7];
    Student(int num, string se, Data birthd, string iid, char a[7]) :People(num, se, birthd, iid) {
        strcpy(classNo, a);
    }
    ~Student() {

    };
    void Show_Student() {
        cout << "This is student:" << endl;
        cout << "ClassNo :" << classNo << endl;
    }
};
class Teacher :virtual public People {
public:
    char principalship[11];
    char department[21];
    Teacher(int num, string se, Data birthd, string iid, char a[11],char b[21]) :People(num, se, birthd, iid) {
        strcpy(principalship, a);
        strcpy(department, b);
    }
    Teacher() {

    }
    void Show_Teacher() {
        cout << "This is teacher:" << endl;
        cout << "Principalship :" << principalship << endl;
        cout << "Department :" << department << endl;
    }
};
class Graduate :virtual public Student {
public:
    char subject[21];
    Teacher adviser;
    Graduate(int num, string se, Data birthd, string iid, char a[7], char c[21],Teacher vt) :People(num, se, birthd, iid), Student(num, se, birthd, iid, a) {
        strcpy(subject, c);
        adviser = vt;
    }
    ~Graduate() {

    }
    void Show_Graduate() {
        cout << "This is Graduate:" << endl;
        cout << "The subject:" << subject << endl;
        cout << "The adviser teacher:" << endl;
        cout << "Principalship:" << adviser.principalship<< endl;
        cout << "Department:" << adviser.department << endl;
        cout << endl;
    }
};
class TA :public Graduate, public Teacher {
    TA(int num, string se, Data birthd, string iid, char a[7], char c[21], Teacher vt) :People(num, se, birthd, iid), Student(num, se, birthd, iid, a), Graduate(num, se, birthd, iid, a, c, vt) {

    }
    ~TA() {

    }
    void Show_TA() {
        cout << "This is TA:" << endl;
        cout << "The classNo:" << classNo << endl;
    }
};
int main()
{
    People asp;
    asp.get_People();
    asp.details();
    Data a(1998, 8, 3);
    Student b(18,"male",a,"110","001");
    b.Show_Student();
    Data a1(1987, 8, 3);
    Teacher c(25, "female", a1,"1614","Advanced", "Promotion");
    c.Show_Teacher();
    Data a2(1990, 8, 3);
    Graduate d(22, "female", a2, "1013", "111", "CS", c);
    d.Show_Graduate();
    return 0;
}

3.测试截图

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年05月01日,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【C++面向对象——继承与派生】派生类的应用(头歌实践教学平台习题)【合集】
Rossy Yan
2024/12/24
960
【C++面向对象——继承与派生】派生类的应用(头歌实践教学平台习题)【合集】
C++创建People类--练习
题目描述 /*设计一个用于人事管理的People(人员)类。*/ /* 考虑到通用性,这里只抽象所有类型人员都具有的属性: number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)等等。 其中“出生日期”定义为一个“日期”类内嵌子对象。 用成员函数实现对人员信息的录入和显示。 要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。 */ 代码如下 #include<iostream> #include<string> using namespace std; class
Enterprise_
2018/05/18
1.3K0
C++重载运算符练习--对people类重载“= =”运算符和“=”运算符
题目描述 对people类重载“= =”运算符和“=”运算符,“==”运算符判断两个people类对象的id属性是否相等;“=”运算符实现people类对象的赋值操作。 代码如下 #include<iostream> #include<string> using namespace std; class Data{ public: Data(){} Data(int yy,int mm,int dd){ year=yy; month=mm; day=dd;
Enterprise_
2018/05/18
3.2K2
C++创建学生类练习
/*作业,定义一个学生类*/ /*数据成员:学号、姓名、数学、英语、计算机三科成绩 *成员函数:求总成绩、求三科平均成绩、输出学生信息 *新增一个生日类 2018.4.2 */ #include <iostream> #include <string> using namespace std; class Data { public: Data(); Data(int ye, int mon, int da); Data(Data &da); void inf(); p
Enterprise_
2018/05/18
7380
【期末不挂科-C++考前速过系列P4】大二C++实验作业-继承和派生(3道代码题)【解析,注释】
YY的秘密代码小屋
2024/01/23
1480
C++继承(多继承、菱形继承?)
继承(inheritance)机制是面向对象程序设计,使代码可以复用的最重要的手段。它允许程序员在保持原有类特性的基础上进行扩展,以增加功能。这样产生新的类,称为派生类。
利刃大大
2023/04/12
2.1K0
C++继承(多继承、菱形继承?)
继承练习之学生教师类—C++
通用类、学生类、教师类 /* 功能:学生教师类 日期:2013-11-26 */ #include <iostream> #include <string> using namespace std; /***************************************************/ //通用类 class Person { public: Person(string Number,string Name):m_aNumber(Number),m_aName(Name){}; vo
WindCoder
2018/09/19
8350
C++学生选课系统 【含 代码】
本系统的用户分为普通用户和管理员两类,其中普通用户包括教师和学生。普通用户只能对自己的信息进行查询与修改,管理员则拥有所有功能权限。
全栈程序员站长
2022/11/04
2.1K0
C++学生选课系统 【含 代码】
C++实验报告
C++面向对象程序设计实验报告实验1 编程环境的熟悉及简单程序的编制1.3.1 任务一1.3.1 任务二
用户7886150
2021/02/08
1.3K0
python3--object类,继承与派生,super方法,钻石继承问题
{'kind': '波斯猫', 'name': '小黑', 'sex': '公'}
py3study
2018/08/02
1.2K0
【c++】C++中的继承&&菱形继承详解
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用
用户10925563
2024/06/04
1760
【c++】C++中的继承&&菱形继承详解
银行卡信息录入系统(一)之 宏定义的应用
设计一套代码,将结构体声明放在自定义头文件中,在主程序中实现对800到801个人的信息录入,并将最后一个录入的人员信息打印出来。人员信息包括卡主姓名、性别、卡号、身份证号、余额、出生日期、发卡日期等。
Reborn Lee
2020/06/29
5840
【C++】继承 - 从基类到派生类的代码复用逻辑
 继承机制是面向对象程序设计使代码可以复用的手段,它允许我们在保持原有类基础上面拓展,增加方法(成员函数)和属性(成员变量),这样产生新的类,称为派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的函数层次的复用,继承是类设计层次的复用。  下面是没有继承之前实现的两个类,一个是student一个是teacher,它们两个都有姓名,年龄,电话,地址相同的变量,都有identity身份认证的成员函数,设计到两个类里面就是冗余的。它们也有不同的成员函数和变量,比如老师独有的成员变量是职称,学生独有的成员变量是学号。学生独有的成员函数是学习,老师独有的成员函数是授课。
_孙同学
2025/04/14
1210
【C++】继承 - 从基类到派生类的代码复用逻辑
C语言入门系列之10.结构体和共用体
引入: 有时需要将不同类型的数据组合成一个有机的整体,以便于引用。 例如,一个学生有学号、姓名、性别、年龄、地址等属性,需要定义int num; char name[20]; char sex; int age; int char addr[30];等属性,如下:
cutercorley
2020/07/23
1.2K0
C语言入门系列之10.结构体和共用体
学生管理系统C++(初学者,不使用链表)
【题目】student.txt(GB2312 编码)中存放了 20 个学生信息,包 括:学号、姓名、性别、籍贯、出生日期。这个 20 个同学没有重名 的。编写一个学生信息管理小程序,实现下面的功能:
薄荷冰
2024/01/22
1290
学生管理系统C++(初学者,不使用链表)
C++基础构造函数(constructor)
C++中的类可以定义与类名相同的特殊成员函数,这种与类名相同的成员函数叫做构造函数,构造函数在定义时可以有参数;但是是没有任何返回类型的声明。
羊羽shine
2019/05/28
5210
【C++】类和对象之继承
简单来说就是类似于在一个类中包含了另一个类的成员函数和成员变量以及对应的访问权限。
啊QQQQQ
2024/11/19
890
【C++】类和对象之继承
C++:继承与派生
为什么会有继承这样的语法呢??试想这样一个场景:假设我们这个App需要去获取不同类型用户的数据,并进行分类,那么就需要我们去写对应不同的类,比如说学生、老师、军人、公司职工…………每个类都需要有名字、联系方式、家庭住址、年龄……,我们会发现这样每个类都要写一份,非常冗余,于是我们的祖师爷为了解决这个问题,设计出了继承的语法,比如说用户的共同点是都是用户,我们就可以写一个关于人的类,作为基类,而不同类型用户就作为基类的派生类,去继承基类的成员,从而达到我们的目的。
小陈在拼命
2024/03/12
2080
C++:继承与派生
C++课本的练习题及答案(第五章)
1.语句  cout<<(1&2)<<","<<(1&&2)<<endl;  的输出结果是(    )。
Twcat_tree
2022/11/29
8790
【C++】———— 继承
看一下这张图片,就可以看出来,使用Student定义的s,就继承了Person的成员和函数。
用户11036582
2024/07/09
980
【C++】———— 继承
相关推荐
【C++面向对象——继承与派生】派生类的应用(头歌实践教学平台习题)【合集】
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验