多态练习题.docx

上传人:b****9 文档编号:23385410 上传时间:2023-05-16 格式:DOCX 页数:16 大小:19.28KB
下载 相关 举报
多态练习题.docx_第1页
第1页 / 共16页
多态练习题.docx_第2页
第2页 / 共16页
多态练习题.docx_第3页
第3页 / 共16页
多态练习题.docx_第4页
第4页 / 共16页
多态练习题.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

多态练习题.docx

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

多态练习题.docx

多态练习题

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<<"输入新的工资:

"<>empsa;

r->getsalary(empsa);

cout<<"请输入新的职务"<>q;

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、上课教材的课后习题

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

当前位置:首页 > 工程科技 > 电力水利

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1