第十二周实验指导--任务2--分别定义Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部)

本文主要是介绍第十二周实验指导--任务2--分别定义Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生 
* All rights reserved.
* 文件名称:分别定义Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部)

* 作    者:         雷恒鑫                       
* 完成日期:     2012    年 04      月  29  日
* 版 本 号:       V1.0   
* 对任务及求解方法的描述部分
* 输入描述: 1)在两个基类中都包含姓名、年龄、性别、地址、电话等数据成员。 

                 (2)在Teacher类中还包含数据成员title(职称),在Cadre类中还包 含数据成员post(职务),在Teacher_Cadre类中还包含 数据成员                          wages(工资)。 

                 (3)对两个基类中的姓名、年龄、性别、地址、电话 等数据成员用相同的名字,在引用这些数据成员时,指定作用域。

                (4)在类体中声明成员函数,在类外定义成员函数。

                (5)在派生类Teacher_Cadre的成员函数show中调用Teacher类中的display函数,输出姓名、年龄、性别、职称、地址、电话,然后再用                     cout语句输出职务与工资。

* 问题描述: 
* 程序输出: 

* 程序头部的注释结束

*/

#include<iostream>   
#include<string>
#include <iomanip>
using namespace std;class Teacher
{
public: Teacher(string nam,int Age,int Sex,char *Department, int phone,string title1);~Teacher( );void display();
protected: string name;int m_nAge;  int m_nSex;//0:women,1:man  char *m_szDepartment;  int m_phone; string title;
};
Teacher::Teacher(string nam,int Age,int Sex,char *Department,int phone,string title1)
{name=nam;m_nAge=Age;m_nSex=Sex;int i;m_szDepartment=new char[30];for(i=0;i<30;++i)m_szDepartment[i]=*(Department+i);  //此处的处理是个重点,处理不好,会在程序中植入非常严重且隐蔽性极强的"定时炸弹"  //strcpy(m_szDepartment,Department);  m_phone=phone;title=title1;
}Teacher::~Teacher()  
{  delete [] m_szDepartment;   
}  
void Teacher::display()
{cout << setiosflags(ios :: left) << setw(5)  <<name<< setw(5) <<m_nAge << setw(5)<<((m_nSex==0)?"women":"man")<<setw(8)<<m_szDepartment<<setw(5)<<title<<setw(5)<<m_phone;  
}  
class Cadre
{
public: Cadre(string nam,int Age,int Sex,char *Department,int phone,string post1) ;~Cadre( ); 
protected: string name;int m_nAge;  int m_nSex;//0:women,1:man  char *m_szDepartment;  int m_phone; string post;
};
Cadre::Cadre(string nam,int Age,int Sex,char *Department,int phone,string post1)
{name=nam;m_nAge=Age;m_nSex=Sex;int i;m_szDepartment=new char[30];for(i=0;i<30;++i)m_szDepartment[i]=*(Department+i);   m_phone=phone; post=post1;
}
Cadre::~Cadre()  
{  delete [] m_szDepartment;    
}    
class Teacher_Cadre:public Teacher,public Cadre
{
public: Teacher_Cadre(string nam,int Age,int Sex,char *Department,int phone,string title1,string post1,float wages1) ;//~Teacher_Cadre( ); void show();friend ostream & operator<<(ostream &,const Teacher_Cadre &);//重载运算符"<<" 
protected: /*string name;int m_nAge;  int m_nSex;//0:women,1:man  char *m_szDepartment;  int m_phone; */float wages;
};
Teacher_Cadre::Teacher_Cadre(string nam,int Age,int Sex,char *Department,int phone,string title1,string post1,float wages1):Teacher(nam,Age,Sex,Department,phone,title1),Cadre(nam,Age,Sex,Department,phone,post1),wages(wages1){}
/*Teacher_Cadre::~Teacher_Cadre()  
{  delete [] m_szDepartment;   
}*/
void Teacher_Cadre::show()
{display();
}
ostream & operator<<(ostream &output,const Teacher_Cadre &p)  
{  output<<"    工资为:";output<<setw(5)<<p.wages<<"  ";  output<<"职务为:";output<<p.title<<endl;  return output;  
}int main( )
{string name,title1,post1;char department[10]; int sex,age;int phone;  float wages;  cout<<"input Teacher_Cadre's name,Age,sex(0:women,1:man),department,phone,title,post,wages:\n";  cin>>name>>age>>sex>>department>>phone>>title1>>post1>>wages;  Teacher_Cadre Teacher_Cadre1(name,age,sex,department,phone,title1,post1,wages);  Teacher_Cadre1.show(); cout<<Teacher_Cadre1;system("PAUSE");return 0;
}

运行结果:



这篇关于第十二周实验指导--任务2--分别定义Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/335765

相关文章

Spring中配置ContextLoaderListener方式

《Spring中配置ContextLoaderListener方式》:本文主要介绍Spring中配置ContextLoaderListener方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录Spring中配置ContextLoaderLishttp://www.chinasem.cntene

Redis实现延迟任务的三种方法详解

《Redis实现延迟任务的三种方法详解》延迟任务(DelayedTask)是指在未来的某个时间点,执行相应的任务,本文为大家整理了三种常见的实现方法,感兴趣的小伙伴可以参考一下... 目录1.前言2.Redis如何实现延迟任务3.代码实现3.1. 过期键通知事件实现3.2. 使用ZSet实现延迟任务3.3

AJAX请求上传下载进度监控实现方式

《AJAX请求上传下载进度监控实现方式》在日常Web开发中,AJAX(AsynchronousJavaScriptandXML)被广泛用于异步请求数据,而无需刷新整个页面,:本文主要介绍AJAX请... 目录1. 前言2. 基于XMLHttpRequest的进度监控2.1 基础版文件上传监控2.2 增强版多

Docker镜像修改hosts及dockerfile修改hosts文件的实现方式

《Docker镜像修改hosts及dockerfile修改hosts文件的实现方式》:本文主要介绍Docker镜像修改hosts及dockerfile修改hosts文件的实现方式,具有很好的参考价... 目录docker镜像修改hosts及dockerfile修改hosts文件准备 dockerfile 文

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.

springboot security使用jwt认证方式

《springbootsecurity使用jwt认证方式》:本文主要介绍springbootsecurity使用jwt认证方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录前言代码示例依赖定义mapper定义用户信息的实体beansecurity相关的类提供登录接口测试提供一