多态练习题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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
using namespace std;
class XS{
public:
virtual void dispXM()=0;
virtual void dispXB()=0;
virtual void dispNL()=0;
};
class CZS:public XS{
public:
CZS(char * m="张三",int b=1,int n=14);
void dispXM();
void dispXB();
void dispNL();
protected:
char xm[9];
int xb,nl;
};
CZS::CZS(char *m,int b,int n)
{
strcpy(xm,m);
xb=b,nl=n;
}
void CZS::dispXM()
{
cout<<"name:"< } void CZS::dispXB() { if(xb==1) cout<<"Man"< if(xb==0) cout<<"Woman"< } void CZS::dispNL() { cout<<"age:"< } class GZS:public XS{ public: GZS(char * m="张三",int b=1,int n=17); void dispXM(); void dispXB(); void dispNL(); protected: char xm[9]; int xb,nl; }; GZS::GZS(char *m,int b,int n) { strcpy(xm,m); xb=b,nl=n; } void GZS::dispXM() { cout<<"name:"< } void GZS::dispXB() { if(xb==1) cout<<"Man"< if(xb==0) cout<<"Woman"< } void GZS::dispNL() { cout<<"age:"< } class DXS:public XS{ public: DXS(char * m="张三",int b=1,int n=20); void dispXM(); void dispXB(); void dispNL(); protected: char xm[9]; int xb,nl; }; DXS::DXS(char *m,int b,int n) { strcpy(xm,m); xb=b,nl=n; } void DXS::dispXM() { cout<<"name:"< } void DXS::dispXB() { if(xb==1) cout<<"Man"< if(xb==0) cout<<"Woman"< void DXS::dispNL() { cout<<"age:"< } void displayP(XS *p) { p->dispXM(); p->dispXB(); p->dispNL(); } void displayR( XS &p) { p.dispXM(); p.dispXB(); p.dispNL(); } void main() { CZS czs("赵一",1,12); GZS gzs("钱二",0,15); DXS dxs("孙三",1,18);