C++程序设计 (第三版) 谭浩强 习题11.9
习题 11.9 分别定义Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部)类。
1. 在两个基类中都包含姓名、年龄、性别、地址、电话等数据成员。
2. 在Teacher类中还包含数据成员title(职称),在Cadre类中还包含数据成员post(职务),在Teacher_Cadre类中还包含数据成员wages(工资)。
3. 对两个基类中的姓名、年龄、性别、地址、电话等数据成员用相同的名字,在引用这些数据成员时,指定作用域。
4. 在类体中声明成员函数,在类外定义成员函数。
5. 在派生类Teacher_Cadre的成员函数show中调用Teacher类中的display函数,输出姓名、年龄、性别、职称、地址、电话,然后再用cout语句输出职务与工资。
IDE工具:VS2010
Note: 使用不同的IDE工具可能有部分差异。
代码块:
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
class Teacher{
public:
Teacher(){name = '\0'; age = 0; gender = 'M'; address = '\0'; tel = 0; title = '\0';}
Teacher(string na, int a, char g, string addr, int t, string tit):
name(na), age(a), gender(g), address(addr), tel(t), title(tit){}
void input();
void display();
protected:
string name;
int age;
char gender;
string address;
int tel;
string title;
};
void Teacher::input(){
cout<<"Enter Teacher Name: ";
getline(cin, name);
cout<<"Enter Teacher Age(22 ~ 60): ";
cin>>age;
while(age < 22 || age > 60){
cout<<"Age Error! Retry!\nEnter Teacher Age(22 ~ 60): ";
cin>>age;
}
cout<<"Enter Teacher Gender(M or F): ";
cin>>gender;
while(gender != 'M' && gender != 'F'){
cout<<"Gender Error! Retry!\nEnter Teacher Gender(M or F): ";
cin>>gender;
}
fflush(stdin);
cout<<"Enter Teacher Address: ";
getline(cin, address);
cout<<"Enter Teacher Tel Number(8 digits): ";
cin>>tel;
while(tel < 10000000 || tel > 99999999){
cout<<"Tel Number Error! Retry!\nEnter Teacher Tel Number(8 digits): ";
cin>>tel;
}
cout<<"Enter Teacher Title: ";
getline(cin, title);
cout<<endl;
}
void Teacher::display(){
cout<<setiosflags(ios::left);
cout<<" Name: "<<name<<endl;
cout<<" Age: "<<setw(2)<<age<<endl;
cout<<" Gender: "<<setw(1)<<gender<<endl;
cout<<"Address: "<<setw(10)<<address<<endl;
cout<<" Tel: "<<setw(8)<<tel<<endl;
cout<<" Title: "<<setw(10)<<title<<endl;
}
class Cadre{
public:
Cadre(){name = '\0'; age = 0; gender = 'M'; address = '\0'; tel = 0; post = '\0';}
Cadre(string na, int a, char g, string addr, int t, string p):
name(na), age(a), gender(g), address(addr), tel(t), post(p){}
void input();
void display();
protected:
string name;
int age;
char gender;
string address;
int tel;
string post;
};
void Cadre::input(){
cout<<"Enter Cadre Name: ";
getline(cin, name);
cout<<"Enter Cader Age(22 ~ 60): ";
cin>>age;
while(age < 22 || age > 60){
cout<<"Age Error! Retry!\nEnter Cadre Age(22 ~ 60): ";
cin>>age;
}
cout<<"Enter Cadre Gender(M or F): ";
cin>>gender;
while(gender != 'M' && gender != 'F'){
cout<<"Gender Error! Retry!\nEnter Cadre Gender(M or F): ";
cin>>gender;
}
fflush(stdin);
cout<<"Enter Cardre Address: ";
getline(cin, address);
cout<<"Enter Cadre Tel Number(8 digits): ";
cin>>tel;
while(tel < 10000000 || tel > 99999999){
cout<<"Tel Number Error! Retry!\nEnter Cadre Tel Number(8 digits): ";
cin>>tel;
}
cout<<"Enter Cadre Post: ";
getline(cin, post);
cout<<endl;
}
void Cadre::display(){
cout<<setiosflags(ios::left);
cout<<" Name: "<<setw(10)<<name<<endl;
cout<<" Age: "<<setw(2)<<age<<endl;
cout<<" Gender: "<<setw(1)<<gender<<endl;
cout<<"Address: "<<setw(10)<<address<<endl;
cout<<" Tel: "<<setw(8)<<tel<<endl;
cout<<" Post: "<<setw(10)<<post<<endl;
}
class Teacher_Cadre: public Teacher, public Cadre{
public:
Teacher_Cadre() {Teacher::name = '\0'; Teacher::age = 0; Teacher::gender = 'M'; Teacher::address = '\0'; Teacher::tel = 0; title = '\0'; post = '\0'; wage = 0.0;}
Teacher_Cadre(string na, int a, char g, string addr, int t, string tit, string p, double w):
Teacher(na, a, g, addr, t, tit), Cadre(na, a, g, addr, t, p), wage(w){}
void input();
void show();
private:
double wage;
};
void Teacher_Cadre::input(){
cout<<"Enter Teacher_Cadre Name: ";
getline(cin, Teacher::name);
cout<<"Enter Teacher_Cader Age(22 ~ 60): ";
cin>>Teacher::age;
while(Teacher::age < 22 || Teacher::age > 60){
cout<<"Age Error! Retry!\nEnter Teacher_Cadre Age(22 ~ 60): ";
cin>>Teacher::age;
}
cout<<"Enter Teacher_Cadre Gender(M or F): ";
cin>>Teacher::gender;
while(Teacher::gender != 'M' && Teacher::gender != 'F'){
cout<<"Gender Error! Retry!\nEnter Teacher_Cadre Gender(M or F): ";
cin>>Teacher::gender;
}
fflush(stdin);
cout<<"Enter Teacher_Cardre Address: ";
getline(cin, Teacher::address);
cout<<"Enter Teacher_Cadre Tel Number(8 digits): ";
cin>>Teacher::tel;
while(Teacher::tel < 10000000 || Teacher::tel > 99999999){
cout<<"Tel Number Error! Retry!\nEnter Teacher_Cadre Tel Number(8 digits): ";
cin>>Teacher::tel;
}
fflush(stdin);
cout<<"Enter Teacher_Cadre Title: ";
getline(cin, Teacher::title);
fflush(stdin);
cout<<"Enter Teacher_Cadre Post: ";
getline(cin, Cadre::post);
cout<<"Enter Teacher_Cadre Wage(>4000): ";
cin>>wage;
while(wage <= 4000){
cout<<"Wage Error! Retry!\nEnter Teacher_Cadre Wage: ";
cin>>wage;
}
cout<<endl;
}
void Teacher_Cadre::show(){
Teacher::display();
cout<<setiosflags(ios::left);
cout<<" Post: "<<setw(10)<<Cadre::post<<endl;
cout<<" Wage: "<<setw(6)<<wage<<endl<<endl;
}
int main(){
Teacher_Cadre tc;
tc.input();
tc.show();
system("pause");
return 0;
}