题目描述:

(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,以分别显示各个记录的人员信息。

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

#include <iostream>
#include <string>
using namespace std; class Person
{
protected:
string Gender;
int Age;
public:
string Name;
Person(string _Name="郑七",string _Gender="男",int _Age=)
{
Name=_Name;
Gender=_Gender;
Age=_Age;
cout<<"Person"<<Name<<"constructed"<<endl;
}
~Person()
{
cout<<"Person"<<Name<<"destructed"<<endl;
}
};
class StudentRecord:virtual public Person
{
public:
int Number;
string ClassName;
int TotalCount;
protected:
int Score;
StudentRecord(string _Name="郑七",string _Gender="男",int _Age=,int _Number=,string _ClassName="软20101",int _TotalCount=,int _Score=):Person(_Name,_Gender,_Age),TotalCount(_TotalCount)
{
Number=_Number;
ClassName=_ClassName;
Score=_Score;
cout<<"Student"<<Name<<"constructed"<<endl;
}
~StudentRecord()
{
cout<<"Student"<<Name<<"destructed"<<endl;
}
};
class TeacherRecord :virtual public Person
{
public:
string CollegeName;
string DepartmentName;
protected:
int Year;
TeacherRecord(string _Name="郑七",string _Gender="男",int _Age=,int _Number=,string _CollegeName="信息",string _DepartmentName="软件",int _Year=):Person(_Name,_Gender,_Age)
{
{
CollegeName=_CollegeName;
DepartmentName=_DepartmentName;
Year=_Year;
cout<<"teacher"<<Name<<"constructed"<<endl;
} }
~TeacherRecord()
{
cout<<"teacher"<<Name<<"destructed"<<endl;
}
}; class TeachingAssistant:virtual public StudentRecord,virtual public TeacherRecord
{
public:
string LectureName;
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)
{
LectureName=_LectureName;
cout<<"teachingassistant"<<Name<<"constructed"<<endl;
}
void Print()
{
cout<<"Name:"<<Name<<" ";
cout<<"Gender:"<<Gender<<" ";
cout<<"Age:"<<Age<<" ";
cout<<"Number:"<<Number<<" ";
cout<<"ClassName:"<<ClassName<<" ";
cout<<"TotalCount:"<<TotalCount<<" ";
cout<<"Score:"<<Score<<" ";
cout<<"CollegeName:"<<CollegeName<<" ";
cout<<"DepartmentName:"<<DepartmentName<<" ";
cout<<"Year:"<<Year<<" ";
cout<<"LectureName:"<<LectureName<<endl;
}
void SetName(string _Name)
{
Name=_Name;
}
~TeachingAssistant()
{
cout<<"teachingassistant"<<Name<<"destructed"<<endl;
}
}; int main()
{
TeachingAssistant a1;
a1.Print();
a1.SetName("郑八");
a1.Print();
return ;
}

虚基类——(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. 【SQL】IN、EXISTS和表连接三者的效率比较

    一. IN和EXISTS比较 在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行查询.此时就会用到IN和EXISTS. 例如:查询departments表中存在的部门的人数. 1. 使 ...

  2. 乐乎共享wifi充电宝项目

  3. 使用Ajax验证用户名

    Ajax是一项很重要的技术,下面简要举个例子,来解释如何使用Ajax.步骤如下:使用Ajax验证用户名使用文本框的onBlur事件 使用Ajax技术实现异步交互创建XMLHttpRequest对象通过 ...

  4. (转)Bootstrap 之 Metronic 模板的学习之路 - (2)源码分析之 head 部分

    https://segmentfault.com/a/1190000006684122 下面,我们找个目录里面想对较小的文件来分析一下源码结构,我们可以看到,page_general_help.htm ...

  5. Vim入门基础知识集锦

        1. 简介 Vim(Vi[Improved])编辑器是功能强大的跨平台文本文件编辑工具,继承自Unix系统的Vi编辑器,支持Linux/Mac OS X/Windows系统,利用它可以建立.修 ...

  6. 移动pc常用Meta标签

    移动常用 <meta charset="UTF-8"> <title>{$configInfos['store_title']}</title> ...

  7. 【转】虚拟化(一):虚拟化及vmware产品介绍

    由于公司最近在做虚拟化监控,因此就需要把虚拟化方面的知识给学习总结一下,对于虚拟化的概念,摘自百度百科,如下:         虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机.在一台计算机 ...

  8. Java8新特性 Stream流式思想(二)

    如何获取Stream流刚开始写博客,有一些不到位的地方,还请各位论坛大佬见谅,谢谢! package cn.com.zq.demo01.Stream.test01.Stream; import org ...

  9. 使用JAVA写一个简单的日历

    JAVA写一个简单的日历import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateF ...

  10. 【剑指Offer】54、字符流中第一个不重复的字符

      题目描述:   请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字 ...