实验五 类的继承、派生和多态(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;
}
MachinePets

效果如下:

 

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中虚函数的应用。

 

四、实验评论

  1. https://www.cnblogs.com/xuexinyu/p/10961971.html#4272140
  2. https://www.cnblogs.com/wjh1022/p/10957581.html#4272113
  3. https://www.cnblogs.com/jessi-wu1005/p/10961379.html#4272110
posted @ 2019-06-02 15:07  zuiyankh  阅读(197)  评论(1编辑  收藏  举报