【TOJ 5253】C++实验:多继承

描述

定义以下类:

1个CPerson类,其属性有:姓名、性别和年龄。

2、从CPerson类派生出CStudent类,增加属性:学号、入学时间和入学成绩;

3、从CPerson类派生出CTeacher类,添加属性:职务、部门和工作时间;

4、由CStudent类派生出CGraduate类,添加属性:研究方向和导师;

5、由CGraduate和CTeacher共同派生出在职研究生类CGradonWork;

6、CDate为日期类。

每个类定义一个Print函数,输出其属性值,输出见样例。

主函数里的代码已经给出,请补充完整,提交时请勿包含已经给出的代码。

int main()
{
	CGradOnWork s1("crq",40, "Male", "teacher", "sxxy", CDate(2002,9,1),"15", CDate(2003, 9, 1), 400, "tm", "cs");
	s1.Print();
	s1.CTeacher::Print();
	s1.CGraduate::Print();
	s1.CStudent::Print();
	s1.CPerson::Print();
	return 0;
}

输入

输出

输出样例信息

样例输入

样例输出

crq 40 Male teacher sxxy 2002-9-1 15 2003-9-1 400 tm cs
crq 40 Male teacher sxxy 2002-9-1
crq 40 Male 15 2003-9-1 400 tm cs
crq 40 Male 15 2003-9-1 400
crq 40 Male

#include<iostream>
#include<string>
using namespace std;
class CDate{
    public:
        int y,m,d;

        CDate();
        CDate(int y,int m,int d):y(y),m(m),d(d){}
};
class CPerson{
    public:
        string name,sex;
        int age;

         CPerson();
        CPerson(string name,int age,string sex):name(name),age(age),sex(sex){}
        void Print()
        {
            cout<<name<<" "<<age<<" "<<sex<<endl;
        }
};
class CStudent:virtual public CPerson{
    public:
        string id;
        CDate school;
        int grade;

        CStudent();
        CStudent(string name,int age,string sex,string id,CDate school,int grade):
            CPerson(name,age,sex),id(id),school(school),grade(grade){}
        void Print()
        {
            cout<<name<<" "<<age<<" "<<sex<<" "<<id<<" "<<school.y<<"-"<<school.m<<"-"<<school.d<<" "<<grade<<endl;
        }
};
class CTeacher:virtual public CPerson{
    public:
        string duty,depart;
        CDate work;

        CTeacher();
        CTeacher(string name,int age,string sex,CDate work,string duty,string depart):
            CPerson(name,age,sex),duty(duty),depart(depart),work(work){}
        void Print()
        {
            cout<<name<<" "<<age<<" "<<sex<<" "<<duty<<" "<<depart<<" "<<work.y<<"-"<<work.m<<"-"<<work.d<<endl;
        }
};
class CGraduate:public CStudent{
    public:
        string study,tutor;

        CGraduate();
        CGraduate(string name,int age,string sex,string id,CDate school,int grade,string study,string tutor):
            CStudent(name,age,sex,id,school,grade),CPerson(name,age,sex),study(study),tutor(tutor){}
        void Print()
        {
            cout<<name<<" "<<age<<" "<<sex<<" "<<id<<" "<<school.y<<"-"<<school.m<<"-"<<school.d<<" "<<grade<<" "<<study<<" "<<tutor<<endl;
        }
};
class CGradOnWork:public CGraduate,public CTeacher{
    public:
        string name,sex;
        int age;
        CGradOnWork();
        CGradOnWork(string name,int age,string sex,string duty,string depart,CDate work,string id,CDate school,int grade,string study,string tutor):
            CTeacher(name,age,sex,work,duty,depart),CGraduate(name,age,sex,id,school,grade,study,tutor),CPerson(name,age,sex),name(name),age(age),sex(sex){}
    void Print()
    {
        cout<<name<<" "<<age<<" "<<sex<<" "<<duty<<" "<<depart<<" "<<work.y<<"-"<<work.m<<"-"<<work.d<<" "<<id<<" "<<school.y<<"-"<<school.m<<"-"<<school.d<<" "<<grade<<" "<<study<<" "<<tutor<<endl;
    }
};
int main()
{
    CGradOnWork s1("crq",40, "Male", "teacher", "sxxy", CDate(2002,9,1),"15", CDate(2003, 9, 1), 400, "tm", "cs");
    s1.Print();
    s1.CTeacher::Print();
    s1.CGraduate::Print();
    s1.CStudent::Print();
    s1.CPerson::Print();
    return 0;
}

原文地址:https://www.cnblogs.com/kannyi/p/8999224.html

时间: 2024-10-08 21:06:37

【TOJ 5253】C++实验:多继承的相关文章

实验6 继承

一.实验目的与要求: 复习运算符重载并应用. 了解并掌握通过继承派生出一个新的类的方法. 二.实验过程: 完成实验6继承中A-C三道题,见:http://acm.hpu.edu.cn/contest.php?cid=1018,密码:c++06.将答题过程简单记录到实验过程中. 将答题结果写到实验结果中,并根据答题结果进行分析.反思,将其写到实验分析中,并写上实验时间. 请按以上要求认真填写实验报告.

实验六 继承定义与使用

实验六 继承定义与使用 实验时间 2018-9-28 1.实验目的与要求 (1) 理解继承的定义: (2) 掌握子类的定义要求 (3) 掌握多态性的概念及用法: (4) 掌握抽象类的定义及用途: (5) 掌握类中4个成员访问权限修饰符的用途: (6) 掌握抽象类的定义方法及用途: (7)掌握Object类的用途及常用API: (8) 掌握ArrayList类的定义方法及用法: (9) 掌握枚举类定义方法及用途. 2.实验内容和步骤 实验1: 导入第5章示例程序,测试并进行代码注释. 测试程序1:

【TOJ 5254】C++实验:继承中的构造函数和析构函数

描述 实现C++类Base和Derived,并编写相关构造函数和析构函数,使其能够输出样例信息. 主函数里的代码已经给出,请补充完整,提交时请勿包含已经给出的代码. int main() { Base *p = new Derived(1, 2); delete p; Base b; Derived d; return 0; } 输入 无 输出 输出样例信息. 样例输入 无 样例输出 Base Constructor 1Derived Constructor 2Derived Destructo

201771010124 王海珍 《实验六 继承定义与使用》第六章实验总结

第一部分:理论知识学习部分 第五章 第五章学习内容主要分为七个模块,分别为: 1.类.超类和子类: a. 类继承的格式: class 新类名extends已有类名. b. 已有类称为:超类(superclass).基类(base class) 或父类(parent  class) 新类称作:子类(subclass).派生类(derived  class)或孩子类(child class) c.super是一个指示编译器调用超类方法的特有关键字,它不是一个对象的引用,不能将super赋给另一个对象

C++第五次实验-------多继承

一.问题及代码 [cpp] view plain copy /* * 文件名称: duojiicheng * 作 者:夏廷辉 * 完成日期: 2016 年 5 月 8 日 * 版 本 号:v1.0 * 对任务及求解方法的描述部分:无 * 输入描述: 无 * 问题描述: 多继承 * 程序输出: 略 * 问题分析: 略 * 算法设计: 略 */ #include<string> #include <iostream> using namespace std; class Teacher

C++ 实验七 继承与派生

1. 设计一个Person类,它有两个派生类Student和Employee,Employee有两个派生类Faculty和Staff. •Person类有一个string类型的名字name,string型的身份号id,string型的电话号码phonenumber, Person类构造函数的对应name的参数不能有默认形参值. •Student类有一个年级grade属性(Freshman.Sophomore.Junior或Senior),将属性值定义为常量: •Employee类有一个strin

C++实验5-多继承

一.问题及代码 /* 文件名称:教师干部类 作者 :尚超 日期 :2016.5.11 平台 :visual c++ 6.0 对任务及求解方法的描述部分: * 输入描述: * 问题描述:分别定义Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部). * 程序输出: 略 * 问题分析: 略 * 算法设计: 略 */ #include<iostream> #include<string> using namespac

C++第5次实验-多继承

项目填空 一.问题及代码 #include <iostream> #include <string> using namespace std; class Person { string name; // 姓名 int age; // 年龄 public: Person() {} void setname(string na) { name=na; } void setage(int a) { age=a; } string getname() { return name; } i

继承与接口课堂作业

(1)动手实验:继承条件下的构造方法调用 运行 TestInherits.java 示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构造函数,注意这句调用代码是否是第一句,影响重大! 结论:通过 super 调用基类构造方法,必须是子类构造方法中的第一个语句.   Super调用基类构造方法的使用: 1.它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数). 2.调用super()必须写在