实验五:类的继承,派生和多态(2)

#宠物

#include<iostream>
#include<string>
#include<cstdlib>
using namespace std;

#ifndef MACHINEPETS_H
#define MACHINEPETS_H

class MachinePets
{
    public:
        MachinePets(const string s);
        virtual string talk() const=0;
        string getNickname();
        virtual ~MachinePets(); 
    
    private:
        string nickname;
};

#endif

MachinePets::MachinePets(const string s):nickname(s)
{ }

string MachinePets::getNickname()
{
    return nickname;
}

MachinePets::~MachinePets()
{ }


#ifndef PETCATS_H
#define PETCATS_H

class PetCats:public MachinePets
{
    public:
        PetCats(const string s);
        string talk() const;
        ~PetCats();
};

#endif

PetCats::PetCats(const string s):MachinePets(s)
{ }

string PetCats::talk() const
{
    cout<<"words:";
    return "wu~";
}

PetCats::~PetCats()
{ }


#ifndef PETDOGS_H
#define PETDOGS_H

class PetDogs:public MachinePets
{
    public:
        PetDogs(const string s);
        string talk() const;
        ~PetDogs();
};

#endif

PetDogs::PetDogs(const string s):MachinePets(s)
{ }

string PetDogs::talk() const
{
    cout<<"words:";
    return "wang wang~";
}

PetDogs::~PetDogs()
{ }


void play(MachinePets *pet)
{
    cout<<pet->getNickname()<<"says"<<pet->talk()<<endl;
}

int main()
{
    PetCats cat("miku");
    PetDogs dog("dahuang");
    
    play(&cat);
    play(&dog);

    return 0;
}
MACHINEPETS

 [修改]

void play(MachinePets *pet)
{
    cout<<pet->getNickname()<<" says "<<pet->talk()<<endl;
}

这里说声抱歉,因为本来是插的项目,然后把音频的那段删了,所以,搬过来一言难尽。

 

[运行结果]

 

 

#游戏

//第一空 
#ifndef _CONTAINER    // Conditional compilation
bool container::useHeal()
{
    //第二空 
    numOfHeal--;
    return 1;        // use heal successfully
}
    //第三空,这里默认p为失败者,由于背包里面就定义了小蓝和小红,所以就这样趴~ 
    bag.set(bag.nOfHeal()+p.bag.nOfHeal(),bag.nOfMW()+p.bag.nOfHeal());
    p.bag.set(0,0); 
    // set the character's bag, get opponent's items
// display character's job
//第四空
void showinfo(player &p1, player &p2)
//第五空 
class swordsman : public player        // subclass swordsman publicly inherited from base player
    //第六空,即将退出 
                cout<<endl<<setw(50)<<"You're about to quit"<<endl;        // player is dead, program is getting to its end, what should we do here?
//第七空,通关 
    cout<<endl<<setw(50)<<"Clearance"<<endl;        // You win, program is getting to its end, what should we do here?

 

 

【实验总结】

嗯,这次做的有点匆忙,有什么不太好的地方见谅~不过可以指出来鸭~

说一下这次实验吧,前面验证性的应该是比较基础的,比较容易理解,宠物那道题的音频因为没法插音频文件的原因,就没把那段代码发上来,参考网址见下(有点乱,当时找了蛮多的,翻历史纪录翻不太到最准确的参考地址辽,崩溃,不过这些是当时或多或少参考到的,有点印象):

       关于VS系列的:https://blog.csdn.net/qq_29540745/article/details/70856283,顺便放一个导入wav文件的教程:https://blog.csdn.net/Sum7mer/article/details/79003631

       另一种:https://blog.csdn.net/u014028070/article/details/42454665

       关于报错“无法将参数从“const char ”转换为“LPCWSTR””的问题解决,报错原因和解决方法在文末,这里说明一下,下面附的完整代码问题和后文提到的一样:

                    https://blog.csdn.net/lindorx/article/details/78724518

      再贴一个相关的,有兴趣的话可以看看:https://blog.csdn.net/qq_26422355/article/details/86571401

      最后再说明一下,如果像https://blog.csdn.net/qq_42110740/article/details/80200936这么直接写的话,我试了很久都没办法编译成功,类里和main()里报错就这样,但是网上当时很多参考资料都是这样的......但是加一点控制播放的语句就行了(大概是这个意思?就是那个定义个数组然后balabala的)如果有知道原因的大佬可以告诉我一下~

 

最后那道游戏,emmm,个人感觉其实还是比较容易看得懂的。大概是英语太菜了?有些很长很长的注释全靠百度翻译活命~还有就是最后填的那几个空也是百度翻译过来的,所以看不懂什么意思很正常,我也不太清楚用词恰不恰当,与你无瓜鸭~还有就是插的诸多头文件就没放进来了。

 

[一个问题]

救救孩子吧,博客园怎么把文件放进来,或者大佬们的运行视频是怎么搞进来的,我录了一下,放不进来,找不到文件在哪插的(PS:我百度过了,被自己傻哭了~)

 

【评论地址】

https://www.cnblogs.com/lyc1103/p/10958083.html#4277472
https://www.cnblogs.com/1499978329f/p/10946283.html
https://www.cnblogs.com/pink-fairy/p/10962988.html

posted @ 2019-06-03 23:06  一朵毛毛  阅读(199)  评论(0编辑  收藏  举报