计科实验六多态的应用参考答案

更新时间:2023-10-07 11:52:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验六 虚函数与多态性

一、实验目的和要求

1. 理解静态多态性和动态多态性。 2. 掌握运算符重载的基本方法。 3. 掌握虚函数的定义与使用方法。

二、实验内容

1.定义一个类Animal,该类中可以存放动物的名字,并有一个Identify函数用于显示动物的种类。定义两个类Cat和Dog,都继承自Animal,并重载Identify函数,不但要显示动物的种类,还要显示动物的名字。定义一个Tiger类,继承自Cat,重载Identify函数,显示动物的种类和名字。 #include using namespace std。 #include class Animal {

public: Animal(string Name,string Kind)。 virtual void show()=0。 protected: string name。 string kind。 }。

Animal::Animal(string Name,string Kind) { name=Name。 kind=Kind。 }

class Cat:public Animal {

public: Cat(string Name,string Kind):Animal(Name,Kind) {} void show() { cout<<\猫的种类和名字是:\。 cout<

class Dog:public Animal {

public:

1 / 6

Dog(string Name,string Kind):Animal(Name,Kind) {} void show() { cout<<\狗的种类和名字是:\。 cout<

class Tiger:public Cat { public: Tiger(string Name,string Kind):Cat(Name,Kind) {} void show() { cout<<\老虎的种类和名字是:\。 cout<

void main() { Animal *p。 Tiger a(\华南虎\圆圆\。 p=&a。 p->show()。 Cat b(\波斯猫\豆豆\。 p=&b。 p->show()。 Dog c(\狼狗\黑熊\。 p=&c。 p->show()。 }

2、模拟定义存折类,并派生出信用卡类;在存折类中提供可以实现开户,存款、取款和查询余额的函数,要求取款金额必须小于余额;信用卡类对取款操作进行修改,允许透支一定金额;在main()函数中定义对象,模拟生活中存折和信用卡的使用过程。 #include using namespace std。 #include

/*模拟定义存折类,并派生出信用卡类;

在存折类中提供可以实现开户,存款、取款和查询余额的函数, 要求取款金额必须小于余额;

信用卡类对取款操作进行修改,允许透支一定金额; 在main()函数中

2 / 6

定义对象,模拟生活中存折和信用卡的使用过程。*/ class bankbook {

private: string accountnumber。 string password。 string id。 string name。 float balance。// public: bankbook(string,string,string,string,float)。 void deposit()。//存款 void withdraw()。//取款 void inquiry()。//查询 }。

bankbook::bankbook(string Accountnumber,string Password,string Id,string Name,float Balance) { accountnumber=Accountnumber。 name=Name。password=Password。id=Id。 balance=Balance。 }

void bankbook::deposit() { float money。 cout<<\请输入你要存款的金额\。 cin>>money。 balance=balance+money。 cout<<\您的余额为\。。 }

void bankbook::withdraw() { float money。 cout<<\请输入你要取款的金额\。 cin>>money。 balance=balance-money。 cout<<\您的余额为\。。 }

void bankbook::inquiry() { cout<<\余额为:\。 }

class credit:publicbankbook {

3 / 6

private:

int money。//表示所能取的最大额度 public: void withdraw()。 }。

void credit::withdraw() { }

3.利用第一题中的各种动物,定义一个动物园类Zoo,经管动物,根据下面的提示编写动物类的相关函数。注意指针的用法。 class Zoo {

public: Zoo( int max)。//构造函数,max为最多能圈养的动物数 ~Zoo(){delete residents}。//析构函数 int Accept(Animal *d)。//接受动物 void ListAnimals()。//显示动物园所有的动物 private: int maxanimals。//动物园最多能圈养的动物数 int numanimals。//动物园当前圈养的动物数 Animal **residents。//指向动物园全员的动物对象的指针数 }。

#include using namespace std。 #include class Animal{ public: Animal(string Name=\。 virtual void Identify() { cout<

Animal::Animal(string Name,string Kind) { name=Name。kind=Kind。 }

class Cat:public Animal{ public: Cat(string Name,string Kind):Animal(Name,Kind){}

4 / 6

void Identify() { cout<<\猫是:\ 品种:\。 } }。

class Dog:public Animal{ public: Dog(string Name,string Kind):Animal(Name,Kind){} void Identify() { cout<<\狗是:\ 品种:\。 } }。

class Tiger:public Cat{ public: Tiger(string Name,string Kind):Cat(Name,Kind){} void Identify() { cout<<\老虎是:\ 种类:\。 } }。

class Zoo {

public: Zoo( int max)。//构造函数,max为最多能圈养的动物数 //~Zoo(){delete residents}//析构函数 int Accept(Animal *d)。//接受动物 void ListAnimals()。//显示动物园所有的动物 private: int maxanimals。//动物园最多能圈养的动物数 int numanimals。//动物园当前圈养的动物数 Animal **residents。//指向动物园全员的动物对象的指针数 }。

Zoo::Zoo(int max) { maxanimals=max。 numanimals=0。 residents=new Animal*[max]。 }

int Zoo::Accept(Animal *d) { residents[numanimals]=d。 numanimals++。 return numanimals。

5 / 6

}

void Zoo::ListAnimals() { int i=0。 cout<<\动物园里面包括的动物有:\只动物,分别为:\。 for(i=0。iIdentify()。 }

void main() { Animal *p。 Cat c(\凯迪\波斯猫\。 Dog d(\土豆\贵宾犬\。 Dog d1(\哈利\牧羊犬\。 Tiger t(\圆圆\华南虎\。 Tiger t1(\团团\东北虎\。 p=&c。 Zoo z(10)。

z.Accept(p)。 z.Accept(&d)。 z.Accept(&t)。 z.Accept(&d1)。 z.Accept(&t1)。 z.ListAnimals()。 }

6 / 6

本文来源:https://www.bwwdw.com/article/6y3d.html

Top