1.第一题
1、某学校教职工的工资计算方法为:
所有
教职工都有基本工资。
教师
月工资为基本工资
+
课时补贴,课时补贴根据职称和课时计算。例如,每课时教授补贴
50
元,副教授补贴
30
元,讲师补贴
20
元。
管理
人员月薪为基本工资
+
职务工资。
实验室
人员月薪为基本工资
+
工作日补贴,工作日补贴等于日补贴(假设为
20
元)
×
月工作日数。
定义教职工抽象类,派生教师类、管理人员类和实验室类,编写程序测试这个类体系。
提示:(1)定义教职工类staff为一个抽象类,里面包含两个纯虚函数input()和output(),在派生类教师类、管理人员类和实验室类分别具体实现这两个纯虚函数。分析题意,教职工类需要输入姓名 职称课时;管理人员类需要输入姓名和职务工资;实验室人员类需要输入姓名和工作日数。
(2)在基类教职工类中应该包含共有的一些数据成员,派生类中定义自己特有的数据成员,请自己思考各自应该定义哪些数据成员以及它们的访问权限。
#include <bits\stdc++.h>
using namespace std;
class staff
{
public:int wage;
virtual int input()=0;
virtual int output()=0;
};
class Techer:public staff
{
string name,title;
int h;
public:
int input()
{
cout<<"教师工资计算"<<endl;
wage=4000;
cout<<"姓名?";
cin>>name;
cout<<"职称 (教授 副教授 讲师) :";
cin>>title;
cout<<"课时?";
cin>>h;
return 0;
}
int output()
{
if(title=="教授")
{
cout<<"工资:"<<wage+h*50<<endl;
}
else if(title=="副教授")
{
cout<<"工资:"<<wage+h*30<<endl;
}
else if(title=="讲师")
{
cout<<"工资:"<<wage+h*20<<endl;
}
return 0;
}
};
class Experiment:public staff
{
string name;
int d;
public:
int input()
{
cout<<"管理人员工资计算"<<endl;
wage=4000;
cout<<"姓名?";
cin>>name;
cout<<"工作日数?";
cin>>d;
return 0;
}
int output()
{
cout<<"工资:"<<wage+d*20<<endl;
}
};
class Manger:public staff
{
double w;
string name;
public:
int input()
{
cout<<"实验室人员工资计算"<<endl;
wage=4000;
cout<<"姓名?";
cin>>name;
cout<<"职务工资?";
cin>>w;
return 0;
}
int output()
{
cout<<"工资:"<<wage+w<<endl;
}
};
int main()
{
staff *p;
Techer t;
p=&t;
p->input();
p->output();
Experiment e;
p=&e;
p->input();
p->output();
Manger m;
p=&m;
p->input();
p->output();
return 0;
}
2.第二题
2、
编写程序。已知有一个描述个人信息的Person类,数据成员记录个人姓名name和身份证号idNumber;成员函数print输出个人信息,构造函数完成对数据成员的初始化。请根据Person类和main函数运行结果,补充定义Person类的派生类Teacher类,除了记录教师的姓名和身份证号,还须记录职称title和工资wage;成员函数print输出教师个人信息,构造函数完成对数据成员的初始化。
#include <bits\stdc++.h>
using namespace std;
class person
{
protected:
string name,id;
public:
person(string i,string j)
{
name=i;
id=j;
}
int out()
{
cout<<"姓名:"<<name<<endl;;
cout<<"身份证号:"<<id<<endl;
}
};
class Techer:public person
{
string wage,title;
int h;
public:
Techer(string i,string j,string k,string t):person(i,j)
{
title=k;
wage=t;
}
int out()
{
person::out();
cout<<"职称:"<<title<<endl;
cout<<"工资:"<<wage<<endl;
return 0;
}
};
int main()
{
Techer t("sdz","10","教授","5000000");
t.out();
return 0;
}
3.第三题
3、定义基类myarray
基类中有数据成员,用来存放一组整数
基类中的成员函数包括
构造函数(完成数据成员的赋值)
Display()函数,用于输出数据成员的值
定义类sortarray继承自myarray,在该类中定义成员函数实现排序功能
定义类reararray继承自myarray,在该类中定义成员函数实现数组元素逆置功能
定义类aevrarray继承自myarray,在该类中定义成员函数实现计算平均值功能
定义newarray类,同时继承sortarray、reararray和averarray,使得newarray类的对象同时具有排序、逆置、和求平均值的功能。
#include <bits\stdc++.h>
using namespace std;
class myarray
{
protected:
int *a,n;
public:
myarray(int N)
{
n=N;
a=new int [n];
cout<<"请输入"<<n<<"个数"<<endl;
for(int i=0;i<n;i++)
cin>>a[i];
}
void out()
{
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
}
};
class sortarray:virtual public myarray
{
public:
sortarray(int i):myarray(i){}
void sortt()
{
sort(a,a+n);
}
};
class reararray:virtual public myarray
{
public:
reararray(int i):myarray(i){}
void rear()
{
for(int i=0;i<n/2;i++)
{
swap(a[i],a[n-i-1]);
}
}
};
class avearray:virtual public myarray
{
public:
avearray(int i):myarray(i){}
void ave()
{
double sum;
for(int i=0;i<n;i++)
sum+=a[i];
cout<<"平均值:"<<sum/n<<endl;
}
};
class newarray:public sortarray,public reararray,public avearray
{
public:
newarray(int i):myarray(i),sortarray(i),avearray(i),reararray(i){}
};
int main()
{
newarray n(10);
n.sortt();
n.out();
n.rear();
cout<<endl;
n.out();
cout<<endl;
n.ave();
return 0;
}
4.第四题
4、设计一个虚基类base,包含姓名和年龄私有数据成员以及相关的成员函数,由它派生出领导类leader,包含职务和部门私有数据成员以及相关的成员函数。再由base派生出工程师类engineer,包含职称和专业私有数据成员以及相关的成员函数。然后由leader和engineer类派生出主任工程师类chairman,采用一些数据进行测试。
#include<iostream.h>
#include<string.h>
class base//基类
{
char *name;//姓名
int age;//年龄
public:
base(){}
void setname(char na[]);
void setage(int a);
char * getname();
int getage();
};
void base::setname(char na[])
{name=new char[strlen(na)+1];
strcpy(name,na);
}
void base::setage(int a)
{age=a;}
char * base::getname(){return name;}
int base::getage(){return age;}
class leader:virtual base//领导类
{char *job;//职务
char *dep;//部门
public:
leader(){}
void setjob(char jb[]);
void setdep(char dp[]);
char *getjob();
char *getdep();
};
void leader::setjob(char jb[])
{job=new char[strlen(jb)+1];
strcpy(job,jb);
}
void leader::setdep(char dp[])
{dep=new char[strlen(dp)+1];
strcpy(dep,dp);
}
char *leader::getjob(){return job;}
char *leader::getdep(){return dep;}
class engineer:virtual public base//工程师类
{char *major;//专业
char *prof;//职称
public:
engineer(){}
void setmajor(char maj[]);
void setprof(char pf[]);
char *getmajor();
char *getprof();
};
void engineer::setmajor(char maj[])
{major=new char[strlen(maj)+1];
strcpy(major,maj);
}
void engineer::setprof(char pf[])
{prof=new char[strlen(pf)+1];
strcpy(prof,pf);
}
char *engineer::getmajor(){return major;}
char *engineer::getprof(){return prof;}
class chairman:public leader,public engineer//主任工程师类
{};
void main()
{chairman c;
c.setname("张军");
c.setage(41);
c.setjob("处长");
c.setdep("设计处");
c.setmajor("嵌入式系统设计");
c.setprof("高级工程师");
cout<<"输出结果:"<<endl;
cout<<" "<<c.getname()<<",年龄"<<c.getage()<<"岁,担任"<<c.getdep()<<c.getjob()<<","<<endl;
cout<<" "<<c.getprof()<<",从事"<<c.getmajor()<<"专业"<<"。"<<endl;}