题目描述:

(1)定义人员类Person:
公有成员:姓名(Name);
保护成员:性别(Gender),年龄(Age);

构造函数和析构函数

(2) 从人员类Person派生学生记录类StudentRecord:
添加公有成员:学号(Number),班级(ClassName),
添加静态公有成员:学生总人数(TotalCount);
添加保护成员:平均成绩(Score);
实现构造函数和析构函数。
(3) 从人员类Person派生教师记录类TeacherRecord:
添加公有成员:学院(CollegeName),系(DepartmentName);
添加保护成员:教龄(Year);
实现构造函数和析构函数。

(4)从学生记录类StudentRecord和教师记录类TeacherRecord派生学生助教类TeachingAssistant:
添加公有成员:辅导课程(LectureName);
实现公有函数:显示人员信息(Show),屏幕打印 姓名,性别,年龄,学号,班级,学生总人数,平均成绩,学院,系,教龄,辅导课程。
实现构造函数和析构函数。为检验类间结构设计是否正确,设计函数void SetName(String name)实现更改一名助教的姓名的功能。

创建一个助教类的对象

助教
姓名 性别 年龄 学号 班级 平均成绩 学院 系 教龄 辅导课程
郑七 男 22 2010123 软20101 89         信息 软件    1 数据结构
显示其信息。

调用更改姓名的函数,更改其姓名为“郑八”,并再次显示其信息。

输入

输出

显示构造的信息和更改前和更改后的助教信息

样例输入

 

样例输出

Person郑七constructed
Student郑七constructed
teacher郑七constructed
teachingassistant郑七constructed
Name:郑七 Gender:男 Age:22 Number:2010123 ClassName:软20101 TotalCount:1 Score:8
9 CollegeName:信息 DepartmentName:软件 Year:1 LectureName:数据结构
Name:郑八 Gender:男 Age:22 Number:2010123 ClassName:软20101 TotalCount:1 Score:8
9 CollegeName:信息 DepartmentName:软件 Year:1 LectureName:数据结构
teachingassistant郑八destructed
teacher郑八destructed
Student郑八destructed
Person郑八destructed

提示

各类的构造函数和析构函数都有输出。

调用公有函数Show,以分别显示各个记录的人员信息。

在派生助教类时,使用虚基类。

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. class Person
  6. {
  7. protected:
  8. string Gender;
  9. int Age;
  10. public:
  11. string Name;
  12. Person(string _Name="郑七",string _Gender="男",int _Age=)
  13. {
  14. Name=_Name;
  15. Gender=_Gender;
  16. Age=_Age;
  17. cout<<"Person"<<Name<<"constructed"<<endl;
  18. }
  19. ~Person()
  20. {
  21. cout<<"Person"<<Name<<"destructed"<<endl;
  22. }
  23. };
  24. class StudentRecord:virtual public Person
  25. {
  26. public:
  27. int Number;
  28. string ClassName;
  29. int TotalCount;
  30. protected:
  31. int Score;
  32. StudentRecord(string _Name="郑七",string _Gender="男",int _Age=,int _Number=,string _ClassName="软20101",int _TotalCount=,int _Score=):Person(_Name,_Gender,_Age),TotalCount(_TotalCount)
  33. {
  34. Number=_Number;
  35. ClassName=_ClassName;
  36. Score=_Score;
  37. cout<<"Student"<<Name<<"constructed"<<endl;
  38. }
  39. ~StudentRecord()
  40. {
  41. cout<<"Student"<<Name<<"destructed"<<endl;
  42. }
  43. };
  44. class TeacherRecord :virtual public Person
  45. {
  46. public:
  47. string CollegeName;
  48. string DepartmentName;
  49. protected:
  50. int Year;
  51. TeacherRecord(string _Name="郑七",string _Gender="男",int _Age=,int _Number=,string _CollegeName="信息",string _DepartmentName="软件",int _Year=):Person(_Name,_Gender,_Age)
  52. {
  53. {
  54. CollegeName=_CollegeName;
  55. DepartmentName=_DepartmentName;
  56. Year=_Year;
  57. cout<<"teacher"<<Name<<"constructed"<<endl;
  58. }
  59.  
  60. }
  61. ~TeacherRecord()
  62. {
  63. cout<<"teacher"<<Name<<"destructed"<<endl;
  64. }
  65. };
  66.  
  67. class TeachingAssistant:virtual public StudentRecord,virtual public TeacherRecord
  68. {
  69. public:
  70. string LectureName;
  71. TeachingAssistant(string _LectureName="数据结构",string _Name="郑七",string _Gender="男",int _Age=,int _Number=,string _CollegeName="信息",string _DepartmentName="软件",int _Year=,string _ClassName="软20101",int _TotalCount=,int _Score=):StudentRecord(_Name, _Gender, _Age, _Number, _ClassName, _TotalCount, _Score),TeacherRecord(_Name,_Gender,_Age,_Number,_CollegeName,_DepartmentName,_Year)
  72. {
  73. LectureName=_LectureName;
  74. cout<<"teachingassistant"<<Name<<"constructed"<<endl;
  75. }
  76. void Print()
  77. {
  78. cout<<"Name:"<<Name<<" ";
  79. cout<<"Gender:"<<Gender<<" ";
  80. cout<<"Age:"<<Age<<" ";
  81. cout<<"Number:"<<Number<<" ";
  82. cout<<"ClassName:"<<ClassName<<" ";
  83. cout<<"TotalCount:"<<TotalCount<<" ";
  84. cout<<"Score:"<<Score<<" ";
  85. cout<<"CollegeName:"<<CollegeName<<" ";
  86. cout<<"DepartmentName:"<<DepartmentName<<" ";
  87. cout<<"Year:"<<Year<<" ";
  88. cout<<"LectureName:"<<LectureName<<endl;
  89. }
  90. void SetName(string _Name)
  91. {
  92. Name=_Name;
  93. }
  94. ~TeachingAssistant()
  95. {
  96. cout<<"teachingassistant"<<Name<<"destructed"<<endl;
  97. }
  98. };
  99.  
  100. int main()
  101. {
  102. TeachingAssistant a1;
  103. a1.Print();
  104. a1.SetName("郑八");
  105. a1.Print();
  106. return ;
  107. }

虚基类——(1)定义人员类Person: 公有成员:姓名(Name); 保护成员:性别(Gender),年龄(Age); 构造函数和析构函数的更多相关文章

  1. Java类的定义与类的实例化

    目录 Java类的定义与类的实例化 类的定义 定义一个简单的类 定义一个成员变量 定义一个方法 定义一个构造器 类的实例化 创建对象及使用对象: 创建对象的过程在内存中的表现 Java类的定义与类的实 ...

  2. c#类—成员函数和封装及构造函数、析构函数、静态成员

    C# 类(Class) 当您定义一个类时,您定义了一个数据类型的蓝图.这实际上并没有定义任何的数据,但它定义了类的名称意味着什么,也就是说,类的对象由什么组成及在这个对象上可执行什么操作.对象是类的实 ...

  3. 走进C++程序世界-------类的定义和使用(数据成员和方法成员,析构函数,构造函数,内联实现)

    类的成员简介 在C++中,可以通过声明一个类来穿件一种新的类型.类将一组变量(他们的类型通常不同)和一组相关的函数组合在一起.类可以有各种类型的变量组成,还可以包含其他类对象.成员变量称为数据成员它们 ...

  4. C++学习笔记(十二):类继承、虚函数、纯虚函数、抽象类和嵌套类

    类继承 在C++类继承中,一个派生类可以从一个基类派生,也可以从多个基类派生. 从一个基类派生的继承称为单继承:从多个基类派生的继承称为多继承. //单继承的定义 class B:public A { ...

  5. typescript 类(类的定义、继承、修饰符、抽象类)

    代码: // 本节内容 // 1.类的定义 // 2.类的继承 // 3.访问修饰符 // 4.静态属性和静态方法 // 5.抽象类和多态 // js // function Person(name) ...

  6. Ruby学习: 类的定义和实例变量

    ruby是完全面向对象的,所有的数据都是对象,没有独立在类外的方法,所有的方法都在类中定义的. 一.类的定义语法 类的定义以 class 关键字开头,后面跟类名,以 end标识符结尾. 类中的方法以 ...

  7. Java:【面向对象:类的定义,静态变量,成员变量,构造函数,封装与私有,this】

    本文内容: 什么是面对对象 类的定义与对象实例化 成员变量 成员变量的有效范围 成员变量的赋值 静态变量.方法与实例变量.方法 构造函数 封装与私有 this关键字 注:函数和方法是一样东西.[由于我 ...

  8. C++学习4-面向对象编程基础(面向对象概念,定义类,定义对象)

    什么是面向对象? 在软件的设计过程中的两种方式: 把程序按照算法的执行步骤来拆解,一步步实现,这是面向过程编程: 把程序按照现实世界的理解,分成不同对象,通过多个对象之间的相互作用,来完成程序的最终功 ...

  9. C++ 类外定义

    类内定义与内联函数 像下面这种函数名与函数体都写在类里面的函数形式被称作类内定义,编译器编译的时候会把它默认成内联函数. class Student { public: void setAge(int ...

随机推荐

  1. Deutsch lernen (08)

    1. empfehlen - empfahl - hat empfohlen  推荐:劝说,劝告 Können Sie mir einen guten Artz empfehlen? jemand e ...

  2. 【原创】redhat5安装oracle10g

    安装缺失的包: 用 root 用户身份运行以下命令: rpm -q gcc make binutils openmotif setarch compat-db compat-gcc compat-gc ...

  3. MySQL--增删改查分页存储过程以及事务

    添加和修改写在一起了 可以用id判断添加和修改 和事务在一起编码 可以让代码更严谨 在这里简单的说一下事务的四大特性 事务四大特性之原子性:原子性是指事务是一个不可再分割的工作单位,事务中的操作要么都 ...

  4. xpath 获取深圳房源信息并导出csv

    # -*- coding: utf-8 -*- # @Time : 2019/4/28 10:44 # @Author : wujf # @Email : 1028540310@qq.com # @F ...

  5. CSS学习笔记之框模型

    1.概述 为了更好的处理 元素内容.内边距.边框 和 外边距 之间的关系,CSS 定义了框模型如下: 内边距.边框 和 外边距 的默认值都是零,可以通过设置元素的 padding.border 和 m ...

  6. 利用python暴力破解压缩文件密码

    import randomimport sysimport zipfileimport timefrom threading import Threadfrom multiprocessing imp ...

  7. jetty+httpClient使用

    背景: 看了https://www.cnblogs.com/donlianli/p/10954716.html这篇文章之后,突然发现自己的知识面太窄了,连这些几乎可以说基础的工具都没怎么用过,于是决定 ...

  8. cnblogs正式启用

    额,因为最近发现CSDN越来越过分了...现在连数学公式都显示错字体了--于是决定把博客搬至cnblogs. Markdown 测试 \(\frac{-b\pm \sqrt{b^2-4ac}}{2a} ...

  9. 利用IO多路复用,使用linux下的EpollSelector实现并发服务器

    import socket import selectors # IO多路复用选择器的模块 # 实例化一个和epoll通信的选择器 epoll_selector = selectors.EpollSe ...

  10. 洛谷 P2633 Count on a tree

    P2633 Count on a tree 题目描述 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中last ...