part 2

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

class MachinePets{
    public:
        MachinePets(const string s):nickname(s){}
        string getNickname()const{
            return nickname;
        }
        virtual string talk()=0;
    private:
        string nickname;
};
class PetCats:public MachinePets{
    public:
        PetCats(const string s):MachinePets(s){}
        string talk(){
            return " says miao wu~";
        }
};
class PetDogs:public MachinePets{
    public:
        PetDogs(const string s):MachinePets(s){}
        string talk(){
            return " says wang wang~";
        }
};

void play(PetCats *a)
{
    cout<<a->getNickname()<<a->talk()<<endl;
}
void play(PetDogs *a)
{
    cout<<a->getNickname()<<a->talk()<<endl;
}

int main(){
    PetCats cat("miku");
    PetDogs dog("da huang");
    
    play(&cat);
    play(&dog);
    
    return 0;
}

结果:

 

总结:

1、如果用a.xxxxx,会出现[Error] request for member 'getNickname' in 'a', which is of pointer type 'PetCats*' (maybe you meant to use '->' ?);

2、在机房做的时候会出现cannot declare variable to be of abstract type的错误,和百度里解释的一一对应检查过了也没什么发现,过了几天在自己电脑重打一遍就正常运行了,也不太清楚咋回事;

3、这个继承派生虚函数什么的,不太会分成好几个文件写哎。

 

实验四评论:

1、https://www.cnblogs.com/hongzai1206/p/10903128.html

2、https://www.cnblogs.com/jackyayue/p/10887554.html

3、https://www.cnblogs.com/fifi1224/p/10895590.html