实验五 类的继承、派生和多态(2)
一、验证性实验
1. 在多层继承中,派生类中出现与基类同名成员时,通过对象名.成员名的方式,访问的成员什么?
对象名.成员名:派生类对象
2. 通过基类指针访问派生类对象时,基类中成员函数有无关键字virtual,访问的成员分别是什么?
基类指针:有关键字时访问派生类,无关键字访问基类对象
二、编程练习
1、设计并实现一个机器宠物类MachinePets
#include<iostream> #include<string> using namespace std; class MachinePets{ public: MachinePets(const string s):nickname(s){} string getNickname() const{return nickname;} virtual string talk(){return 0;} private: string nickname; }; class PetCats:public MachinePets{ public: PetCats(const string s):MachinePets(s){} string talk(){return "miao wu~";} }; class PetDogs:public MachinePets{ public: PetDogs(const string s):MachinePets(s){} string talk(){return "wang wang~";} }; void play(MachinePets *p){ cout<<p->getNickname()<<" says "<<p->talk()<<endl; } int main(){ PetCats cat("miku"); PetDogs dog("da huang"); play(&cat); play(&dog); return 0; }
效果如下:
2、 简单RPG游戏补足与丰富
1--- #ifndef _CONTATNER
2--- numOfHeal--;
3--- bag.set(p.bag.nOfHeal()+bag.nOfHeal(), p.bag.nOfMW()+bag.nOfMW());
p.bag.set(0,0);
4--- void showinfo(player &p1,player &p2)
5--- public player
6--- enemy.isLevelUp();
7--- human->isLevelUp();
效果如下:
三、实验小结
- PetDogs(const string s):MachinePets(s){} MachinePets中的一段代码,想了很久,虽然在上次实验中有相似的操作
- 补充的代码有误?尚未体会到RPG中虚函数的应用。
四、实验评论