多态练习题.docx

上传人:b****5 文档编号:8789066 上传时间:2023-05-15 格式:DOCX 页数:15 大小:17.59KB
下载 相关 举报
多态练习题.docx_第1页
第1页 / 共15页
多态练习题.docx_第2页
第2页 / 共15页
多态练习题.docx_第3页
第3页 / 共15页
多态练习题.docx_第4页
第4页 / 共15页
多态练习题.docx_第5页
第5页 / 共15页
多态练习题.docx_第6页
第6页 / 共15页
多态练习题.docx_第7页
第7页 / 共15页
多态练习题.docx_第8页
第8页 / 共15页
多态练习题.docx_第9页
第9页 / 共15页
多态练习题.docx_第10页
第10页 / 共15页
多态练习题.docx_第11页
第11页 / 共15页
多态练习题.docx_第12页
第12页 / 共15页
多态练习题.docx_第13页
第13页 / 共15页
多态练习题.docx_第14页
第14页 / 共15页
多态练习题.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

多态练习题.docx

《多态练习题.docx》由会员分享,可在线阅读,更多相关《多态练习题.docx(15页珍藏版)》请在冰点文库上搜索。

多态练习题.docx

多态练习题

1、生成表示学生的类XS,提供成员函数dispXM()、dispXB()和dispNL()分别用来显示姓名、性别和年龄,并将他们全部定义为纯虚函数;生成CZS类表示初中生,包含数据成员xm、xb和nl表示学生的姓名、性别和年龄,提供成员函数dispXM()、dispXB()和dispNL()分别用来显示姓名、性别和年龄;再生成类GZS表示高中生和类DXS表示大学生,同样包含相同含义的数据成员xm、xb和nl,也包括成员函数dispXM()、dispXB()和dispNL()。

要求:

(1)设计和实现基本类XS

(2)设计和实现派生类CZS,GZS和DXS

(3)分别生成CZS、GZS、DXS类对象

(4)将CZS、GZS、DXS类对象的指针赋给指针赋给XS类的指针变量。

(5)分别用XS类的指针和引用访问dispXM()、dispXB()和dispNL()函数。

(6)观察程序结果。

 

#include

#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"<

if(xb==0)

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);

XS*p;//定义抽象基类的指针变量p

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<<"├—————┼—————┼—————┼—————┤"<

}

};

classDatabase//职工数据类

{

inttop;

Employeeread[Maxr];

public:

Database()//将职工信息从employee.txt读取到read[]中

{Employees;

top=-1;

fstreamfile("employee.txt",ios:

:

in);

while

(1)

{

file.read((char*)&s,sizeof(s));

if(!

file)break;

top++;

read[top]=s;

}

file.close();

}

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)

file.write((char*)&read[i],sizeof(read[i]));

file.close();

}

};

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<

cout<

cout<

1,并按回车键│\n";

cout<

2,并按回车键│\n";

cout<

3,并按回车键│\n";

cout<

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<<"该职工不存在"<

break;

}

cout<<"输入新的工资:

"<

cin>>empsa;

r->getsalary(empsa);

cout<<"请输入新的职务"<

cin>>q;

r->setzw(q);

addemp(empid,empsa,rname,q);

break;

case3:

cout<<"输入职工编号:

";

cin>>empid;

r=query(empid);

if(r==NULL)

{

cout<<"该读者不存在"<

break;

}

r->delna();

break;

case4:

cout<

cout<

cout<

cout<

cout<

cin>>b;

while(b!

=0){

switch(b)

{

case1:

cout<<"输入职工编号:

";

cin>>empid;

r=query(empid);

if(r==NULL)

{

cout<<"该职工不存在"<

break;

}

cout<<"├—————┼—————┼—————┼—————┤"<

cout<<"│"<

cout<<"├—————┼—————┼—————┼—————┤"<

r->disp();

break;

case2:

break;

}

break;

}

break;

case5:

cout<<"├—————┼—————┼—————┼—————┤"<

cout<<"│"<

cout<<"├—————┼—————┼—————┼—————┤"<

disp();

break;

case6:

clear();

break;

}

}

}

voidmain()

{

intchoice=1;DatabaseEmpDB;

while(choice!

=0)

{

cout<<"********************************************************************************"<

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cin>>choice;

switch(choice)

{

case1:

while

(1){

cout<

EmpDB.empdata();

break;

break;}

}

}

}

3、堆栈的特点是:

先进先出

定义了一个堆栈类stack,包括初始化,压栈(就是将元素放在栈顶)、弹栈(取栈顶的一个元素),释放堆栈等操作

要求运用模版实现,堆栈中可以根据需求放入double、int、char*等数据对象。

4、上课教材的课后习题

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2