【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,包含职称和专业私有数据成员以及相关的成员函数;然后再由leader和engieer,派生出主任工程师类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;
}