计科实验六多态的应用参考答案.docx
《计科实验六多态的应用参考答案.docx》由会员分享,可在线阅读,更多相关《计科实验六多态的应用参考答案.docx(10页珍藏版)》请在冰点文库上搜索。
![计科实验六多态的应用参考答案.docx](https://file1.bingdoc.com/fileroot1/2023-5/8/d819b722-dc54-483a-addc-5b77806671d2/d819b722-dc54-483a-addc-5b77806671d21.gif)
计科实验六多态的应用参考答案
2011计科实验六-多态的应用参考答案
实验六虚函数与多态性
一、实验目的和要求
1.理解静态多态性和动态多态性。
2.掌握运算符重载的基本方法。
3.掌握虚函数的定义与使用方法。
二、实验内容
1.定义一个类Animal,该类中可以存放动物的名字,并有一个Identify函数用于显示动物的种类。
定义两个类Cat和Dog,都继承自Animal,并重载Identify函数,不但要显示动物的种类,还要显示动物的名字。
定义一个Tiger类,继承自Cat,重载Identify函数,显示动物的种类和名字。
#include
usingnamespacestd;
#include
classAnimal
{
public:
Animal(stringName,stringKind);
virtualvoidshow()=0;
protected:
stringname;
stringkind;
};
Animal:
:
Animal(stringName,stringKind)
{
name=Name;
kind=Kind;
}
classCat:
publicAnimal
{
public:
Cat(stringName,stringKind):
Animal(Name,Kind)
{}
voidshow()
{
cout<<"猫的种类和名字是:
"<cout<}
};
classDog:
publicAnimal
{
public:
Dog(stringName,stringKind):
Animal(Name,Kind)
{}
voidshow()
{
cout<<"狗的种类和名字是:
"<cout<}
};
classTiger:
publicCat
{
public:
Tiger(stringName,stringKind):
Cat(Name,Kind)
{}
voidshow()
{
cout<<"老虎的种类和名字是:
"<cout<}
};
voidmain()
{
Animal*p;
Tigera("华南虎","圆圆");
p=&a;
p->show();
Catb("波斯猫","豆豆");
p=&b;
p->show();
Dogc("狼狗","黑熊");
p=&c;
p->show();
}
2、模拟定义存折类,并派生出信用卡类;在存折类中提供可以实现开户,存款、取款和查询余额的函数,要求取款金额必须小于余额;信用卡类对取款操作进行修改,允许透支一定金额;在main()函数中定义对象,模拟生活中存折和信用卡的使用过程。
#include
usingnamespacestd;
#include
/*模拟定义存折类,并派生出信用卡类;
在存折类中提供可以实现开户,存款、取款和查询余额的函数,
要求取款金额必须小于余额;
信用卡类对取款操作进行修改,允许透支一定金额;
在main()函数中
定义对象,模拟生活中存折和信用卡的使用过程。
*/
classbankbook
{
private:
stringaccountnumber;
stringpassword;
stringid;
stringname;
floatbalance;//
public:
bankbook(string,string,string,string,float);
voiddeposit();//存款
voidwithdraw();//取款
voidinquiry();//查询
};
bankbook:
:
bankbook(stringAccountnumber,stringPassword,stringId,stringName,floatBalance)
{
accountnumber=Accountnumber;
name=Name;password=Password;id=Id;
balance=Balance;
}
voidbankbook:
:
deposit()
{
floatmoney;
cout<<"请输入你要存款的金额"<cin>>money;
balance=balance+money;
cout<<"您的余额为"<}
voidbankbook:
:
withdraw()
{
3.利用第一题中的各种动物,定义一个动物园类Zoo,管理动物,根据下面的提示编写动物类的相关函数。
注意指针的用法。
classZoo
{
public:
Zoo(intmax);//构造函数,max为最多能圈养的动物数
~Zoo(){deleteresidents};//析构函数
intAccept(Animal*d);//接受动物
voidListAnimals();//显示动物园所有的动物
private:
intmaxanimals;//动物园最多能圈养的动物数
intnumanimals;//动物园当前圈养的动物数
Animal**residents;//指向动物园全员的动物对象的指针数
};
#include
usingnamespacestd;
#include
classAnimal{
public:
Animal(stringName="",stringKind="");
virtualvoidIdentify()
{
cout<}
protected:
stringname;
stringkind;
};
Animal:
:
Animal(stringName,stringKind)
{
name=Name;kind=Kind;
}
classCat:
publicAnimal{
public:
Cat(stringName,stringKind):
Animal(Name,Kind){}
voidIdentify()
{
cout<<"猫是:
"<"<}
};
classDog:
publicAnimal{
public:
Dog(stringName,stringKind):
Animal(Name,Kind){}
voidIdentify()
{
cout<<"狗是:
"<"<}
};
classTiger:
publicCat{
public:
Tiger(stringName,stringKind):
Cat(Name,Kind){}
voidIdentify()
{
cout<<"老虎是:
"<"<}
};
classZoo
{
public:
Zoo(intmax);//构造函数,max为最多能圈养的动物数
//~Zoo(){deleteresidents}//析构函数
intAccept(Animal*d);//接受动物
voidListAnimals();//显示动物园所有的动物
private:
intmaxanimals;//动物园最多能圈养的动物数
intnumanimals;//动物园当前圈养的动物数
Animal**residents;//指向动物园全员的动物对象的指针数
};
Zoo:
:
Zoo(intmax)
{
maxanimals=max;
numanimals=0;
residents=newAnimal*[max];
}
intZoo:
:
Accept(Animal*d)
{
residents[numanimals]=d;
numanimals++;
returnnumanimals;
}
voidZoo:
:
ListAnimals()
{
inti=0;
cout<<"动物园里面包括的动物有:
"<"<for(i=0;iresidents[i]->Identify();
}
voidmain()
{
Animal*p;
Catc("凯迪","波斯猫");
Dogd("土豆","贵宾犬");
Dogd1("哈利","牧羊犬");
Tigert("圆圆","华南虎");
Tigert1("团团","东北虎");
p=&c;
Zooz(10);
z.Accept(p);
z.Accept(&d);
z.Accept(&t);
z.Accept(&d1);
z.Accept(&t1);
z.ListAnimals();
}