多态练习题.docx
- 文档编号:8991127
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:16
- 大小:19.28KB
多态练习题.docx
《多态练习题.docx》由会员分享,可在线阅读,更多相关《多态练习题.docx(16页珍藏版)》请在冰点文库上搜索。
多态练习题
1、生成表示学生的类XS提供成员函数dispXM()、dispXB()和dispNL()分别用来显示姓名、性别和年龄,并将他们全部定义为纯虚函数;生成CZS类表示初中生,包含数据成
员xm、xb和nl表示学生的姓名、性别和年龄,提供成员函数dispXM()、dispXB()和dispNL()分别用来显示姓名、性别和年龄;再生成类GZS表示高中生和类DXS表示大学生,同样包
含相同含义的数据成员xm、xb和nI,也包括成员函数dispXM()、dispXB()和dispNL()。
要求:
(1)
设计和实现基本类XS
(2)
设计和实现派生类CZS,GZS^DXS
(3)
分别生成CZSGZSDXS类对象
(4)
将CZSGZSDXS类对象的指针赋给指针赋给
XS类的指针变量。
(5)
分别用XS类的指针和引用访问dispXM()、
dispXB()和dispNL()函数
(6)
观察程序结果。
#inelude
#include
usingnamespacestd;
classXS{
public:
virtualvoiddispXM()=0;
virtualvoiddispXB()=0;
virtualvoiddispNL()=0;
};
classCZS:
publicXS{
public:
CZS(char*m="张三",intb=1,intn=14);voiddispXM();voiddispXB();voiddispNL();
protected:
charxm[9];
intxb,nl;
};
CZS:
:
CZS(char*m,intb,intn)
{
strcpy(xm,m);
xb=b,nl=n;
}
voidCZS:
:
dispXM()
{
cout<<"name:
"< } voidCZS: : dispXB() if(xb==1)cout<<"Man"< if(xb==0) cout<<"Woman"< } voidCZS: : dispNL() { cout<<"age: "< } classGZS: publicXS{ public: GZS(char*m="张三",intb=1,intn=17);voiddispXM(); voiddispXB(); voiddispNL(); protected: charxm[9]; intxb,nl; }; GZS: : GZS(char*m,intb,intn) {strcpy(xm,m);xb=b,nl=n; } voidGZS: : dispXM() { cout<<"name: "< } voidGZS: : dispXB() { if(xb==1)cout<<"Man"< if(xb==0) cout<<"Woman"< } voidGZS: : dispNL() { cout<<"age: "< } classDXS: publicXS{ public: DXS(char*m="张三",intb=1,intn=20); voiddispXM(); voiddispXB(); voiddispNL(); protected: charxm[9]; intxb,nl; }; DXS: : DXS(char*m,intb,intn) {strcpy(xm,m);xb=b,nl=n; } voidDXS: : dispXM() { cout<<"name: "< } voidDXS: : dispXB() { if(xb==1)cout<<"Man"< cout<<"Woman"< voidDXS: : dispNL() { cout<<"age: "< } voiddisplayP(XS*p) { p->dispXM();p->dispXB();p->dispNL(); } voiddisplayR(XS&p) { p.dispXM(); p.dispXB(); p.dispNL(); } voidmain() { CZSczs("赵一",1,12); GZSgzs("钱二",0,15); DXSdxs("孙三",1,18); p=&czs;// 将初中生对象 czs 的地址赋给 p displayP(p); p=&gzs;// 将高中生对象 czs 的地址赋给 p displayP(p); p=&dxs;// 将大学生对象 czs 的地址赋给 p displayP(p); cout<<"\n\n"; XS&r1=czs;//定义抽象基类的引用变量r1为czs的别名 displayR(r1); XS&r2=gzs;〃定义抽象基类的引用变量r2为czs的别名 displayR(r2); XS&r3=dxs;//定义抽象基类的引用变量r3为czs的别名 displayR(r3); cout<<"\n \n"; 2、某小型公司主要有3类人员: 经理、兼职技术人员、兼职销售员。 这些人员分别具有以下属性。 经理: 姓名、编号、固定工资、当月薪水、计算月薪、显示信息兼职技术人员: 姓名、编号、工作小时、每小时工资额、当月薪水、计算月薪、显示信息; 兼职销售员: 姓名、编号、销售额、销售额提成、当月薪水、计算月薪、显示信息要求: 人员编号基数为1000,每输入一个人员信息编号顺序加1 月薪计算办法是经理固定月薪8000元;兼职技术人员按100元/小时领取月薪;兼职推销员按当月销售额的4%提成。 根绝题目要求,设计一个基类employee,然后派生出technician(兼职技术人员)类、manager(经理)类和salesman(兼职销售员)类。 部分成员函数设置为虚函数 将“<<”和“>>”运算符 #include #include #include #include usingnamespacestd; constintMaxr=100; classEmployee//职工类 { inttag;//删除标记 intno;//职工编号 charname[20]; charzw[20];//职工姓名 intsalary;//职工工资 public: Employee(){} char*getname(){returnname;}//获取名字intgettag(){returntag;}//获取标记intgetno(){returnno;}//获取编号intgetsalary(){returnsalary;}voidsetzw(charq[])//设置名字 { strcpy(zw,q); } voidsetname(charna[])//设置名字 { strcpy(name,na); } voidgetsalary(intsa){salary=sa;} voiddelna(){tag=1;}//删除 voidaddemp(intn,intsa,char*na,char*q)//增加{ tag=0;no=n;salary=sa;strcpy(name,na);strcpy(zw,q); } voiddisp()//显示职工信息 { cout<<"|"< <"|"< cout<<"|1111"< } }; classDatabase/职工数据类 { inttop; Employeeread[Maxr]; public: Database。 //将职工信息从employee.txt读取到read[]中{Employees; top=-1; fstreamfile("employee.txt",ios: : in); while (1) { ((char*)&s,sizeof(s)); if(! file)break; top++; read[top]=s; } (); } voidclear()//删除所有 { top=-1; } intaddemp(intn,intsa,char*na,char*q)//增加职工 { Employee*p=query(n); if(p==NULL) { top++; read[top].addemp(n,sa,na,q); return1; } return0; } Employee*query(intempid) { for(inti=0;i<=top;i++) if(read[i].getno()==empid&&read[i].gettag()==0) return&read[i]; returnNULL; } Employee*query1(charempna[20]) { for(inti=0;i<=top;i++) if((read[i].getname()==empna)&&read[i].gettag()==0) return&read[i]; returnNULL; } voiddisp()//职工信息显示 { for(inti=0;i<=top;i++)read[i].disp(); } voidempdata(); ~Database()//将read[]中的信息读如到employee.txt中 { fstreamfile("employee.txt",ios: : out); for(inti=0;i<=top;i++) if(read[i].gettag()==0) ((char*)&read[i],sizeof(read[i])); (); } }; voidDatabase: : empdata()〃职工维护 { intchoice=1; intm=1;intb=1; charrname[20]; intempid;intempsa;charq[20];Employee*r; while(choice! =0) { cout<<"职工维护1: 新增2: 更改3: 删除4: 查找5: 显示6: 全删0: 退出=>"; cin>>choice; switch(choice) { case1: cout< I—; 请选择您所需的操作丨\n"; 经理: 1,并按回车键I\n";业务经理: 2,并按回车键|\n”; 普通职工: 3,并按回车键|\n”; 1—; cin>>m; while(m! =0){switch(m) { case1: cout<<"输入经理编号: cin>>empid;cout<<"输入奖金: "; cin>>empsa; cout<<"输入经理姓名: ";cin>>rname; addemp(empid,8000+empsa,rname,"经理");break; case2: cout<<"输入业务经理编号: ";cin>>empid; cout<<"输入月提成: ";cin>>empsa; cout<<"输入业务经理姓名: ";cin>>rname;addemp(empid,4000+empsa,rname,"业务经理");break; case3: cout<<"输入职工编号: ";cin>>empid; cout<<"输入工资: ";cin>>empsa; cout<<"输入职工姓名: ";cin>>rname; addemp(empid,empsa,rname,"普通职工”);break; } break; } break; case2: cout<<"输入职工编号: "; cin>>empid;r=query(empid); if(r==NULL) { cout<<"该职工不存在"< } cout<<"输入新的工资: "< r->getsalary(empsa); cout<<"请输入新的职务"< r->setzw(q); addemp(empid,empsa,rname,q);break; case3: cout<<"输入职工编号: ";cin>>empid; r=query(empid); if(r==NULL) { cout<<"该读者不存在"< } r->delna();break; case4: cout< 1 -讨 cout< 请选|择您所需的操作 |\n"; cout< 按编|号查找1,并按回车键 |\n"; cout< 返回I2,并按回车键 |\n"; cout< 1 ——什 cin>>b; while(b! =0){ switch(b) { case1: cout<<"输入职工编号: "; cin>>empid; r=query(empid); if(r==NULL) { cout<<"该职工不存在"< break; } "< "< "< cout<<"|1111 cout<<"|"< "<<"|"< cout<<"|1111 r->disp(); break; case2: break; } break;} break; case5: cout<<"|1111"< cout<<"|"< "<<"|"< cout<<"|1111"< disp(); break; case6: clear(); break; } } } voidmain() { intchoice=1;DatabaseEmpDB; while(choice! =0) { cout /“********************************************************************************"< cout< cout< H****************************** 欢迎使用职工管理系统 < ******************************"cout< cout< cout< 1 cout< |请选择您所需的操作 |\n"; cout< \n"|;| cout< 操作11,并按回车键 |\n"; cout< \n"|;| cout< 返回|0,并按回车键 |\n"; cout< 1 —什 cin>>choice;switch(choice) { case1: while (1){ cout< EmpDB.empdata(); break; break;} } } } 3、堆栈的特点是: 先进先出 定义了一个堆栈类stack,包括初始化,压栈(就是将元素放在栈顶)、弹栈(取栈顶的 一个元素),释放堆栈等操作 要求运用模版实现,堆栈中可以根据需求放入double、int、char*等数据对象。 4、上课教材的课后习题
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 练习题