第五章作业

本文介绍了一个使用C++实现的学生和教师数据管理程序。该程序包括一个基础类person及从其派生的学生类student和教师类teacher。此外,还设计了一个包含虚基类base的多层次继承体系,用于创建主任工程师类chairman。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

5.18】编写一个学生和教师数据输入和显示程序,学生数据有编号、姓名、班号和成绩,教师数据有编号、姓名、职称和部门。要求将编号、姓名输入和显示设计成一个类person,并作为学生数据操作类student和教师数据操作类teacher的基类。

#include<iostream>    

using namespace std;
class person {                           //定义一个人物类
public:
    void input()                         //输入数据的成员函数
{ cout<<" 编号:";  cin>>number;
      cout<<" 姓名:"; cin>>name;
}
    void show()                          //输出数据的成员函数
{ cout<<" 编号:"<<number<<endl;
      cout<<" 姓名:"<<name<<endl;
}
private:
   int number;
   char name[10];
};
class student:public person{             //学生类,公有继承人物类
  public:
    void input()
	{ person::input();
      cout<<" 班号:"; 
cin>>depart;
      cout<<" 成绩:"; 
cin>>degree;
}
    void show()
    { person::show();
      cout<<" 班号:"<<depart<<endl;
      cout<<" 成绩:"<<degree<<endl;
    }
private:
     char depart[6];
     int degree;
};
class teacher:public person{              //教师类,公有继承人物类
private:
    char prof[10];
    char depart[10];
public:
    void input()
{ person::input();
cout<<" 职称:"; 
cin>>prof;
cout<<" 部门:";
cin>>depart;
}
   void show()
{ person::show();
cout<<" 职称:"<<prof<<endl;
cout<<" 部门:"<<depart<<endl;
}
};
int  main()                       //主函数
{ student s1;
teacher t1;
cout<<" 输入一个学生数据:\n";
s1.input();
cout<<" 输入一个教师数据:\n"; 
t1.input();
cout<<" 显示一个学生数据:\n"; 
s1.show();
cout<<" 显示一个教师数据:\n"; 
t1.show();
system("pause");
return 0;
}




【5.19】设计一个虚基类base,包含姓名和年龄私有数据成员以及相关的成员函数;由它派生出领导类leader,包含植物和部门私有数据成员以及相关的成员函数;再由base派生出工程师类engieer,包含职称和专业私有数据成员以及相关的成员函数;然后再由leaderengieer,派生出主任工程师类chairman。采用相关数据进行测试。

#include<iostream>    
using namespace std;
class base{                                //基类base
    char *name;                            //姓名
    int age;                               //年龄
public:
    base()                                 //无参的构造函数
    {}
    base(char na[],int a)                  //带参的构造函数
    { name=new char[strlen(na)+1];
      strcpy(name,na);
age=a;
    }
    char*getname()                         //成员函数
	{ return name;}
    int getage()                           //成员函数
	{ return age;}
	~base()                               //析构函数
    {delete []name;}
};
class leader:virtual public base{          //领导类leader
                                          //声明类base是leader的虚基类
char *job;                             //职务
    char *dep;                             //部门
public:
    leader()                               //无参构造函数
    {}
    leader(char na[],int n,char jb[],char dp[]):base( na, n)  //带参构造函数
    { job=new char[strlen(jb)+1];
strcpy(job,jb);
dep=new char[strlen(dp)+1];
strcpy(dep,dp);
}
char*getjob()
{return job;}
char*getdep()
{return dep;}
 ~leader()                      //析构函数
    { delete []job;
      delete []dep;
    }
};
class engineer:virtual public base{  //工程师类engineer
                                       //声明类base是engineer的虚基类
    char *major; //专业
    char *prof;  //职称
public:
engineer()    //无参构造函数
{}
engineer(char na[],int n,char maj[],char pf[]):base( na, n)  //带参构造函数
{ major=new char[strlen(maj)+1];
      strcpy(major,maj);
      prof=new char[strlen(pf)+1];
      strcpy(prof,pf);
}
    char* getmajor()
	{ return major;}
    char* getprof()
	{ return prof;}
~engineer()                  //析构函数
{ delete []major;
      delete []prof;
}
}; 
class chairman:public leader,public engineer{ //主任工程师类chairman
          //chairman是leader和engineer的共同派生类,是base的间接派生类
public: 
    chairman()  //无参构造函数
{};
    chairman(char na[],int n,char jb[],char dp[],char maj[],
char pf[]):base( na, n),leader(na,n,jb,dp),engineer( na, n, maj, pf)
    { }          //带参构造函数
    void dispchairman()
    { cout<<getname()<<",年龄: "<<getage()<<"岁,部门: "<<getdep()
	 	  <<",职务: "<<getjob()<<endl;
      cout<<" 职称: "<<getprof()<<",专业: "<<getmajor()<<endl;
    }
};
int main()
{ chairman c1("陈",35,"处长","教务处","管理学","教授");
  c1.dispchairman();
  system("pause");
return 0;
}




 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值