第五次实验

验证性实验一

第一个是将派生类变成了基类,第二个则是因为虚函数的存在,派生类不会变为基类。

验证性实验二

由于有纯虚数的存在,三个派生类可以用同一个函数实现三个派生类各自的需要,比较方便。

实验三

mian.cpp

#include<iostream>
#include<string>
#include"PetCats.h"
#include"PetDogs.h"
using namespace std;
void play(MachinePets &a);
int main() {
PetCats cat("miku");
PetDogs dog("da huang");
play(cat); // 按照play()形参,传递参数
play(dog); // 按照play()形参,传递参数
return 0;
}
void play(MachinePets &a){
    cout<<a.getnickname()<<" says "<<a.talk()<<endl;
}

machinepet.h

#ifndef MACHINEPETS_H
#define MACHINEPETS_H
#include<iostream>
#include<string>
using namespace std;
class MachinePets{
public:
    MachinePets(string s):nickname(s){}
    string getnickname();
    virtual string talk()=0;
    friend void play(MachinePets *a);
private:
    string nickname;
};
#endif // !MACHINEPETS_H

machinepet.cpp

#include<iostream>
#include<string>
#include"MachinePets.h"
using namespace std;
string MachinePets::getnickname(){
    return nickname;
}

petcats.h

#ifndef PETCATS_H
#define PETCATS_H
#include"MachinePets.h"
#include<string>
using namespace std;
class PetCats:public MachinePets{
public:
	PetCats(const string s);
	string talk();
};
#endif

petcats.cpp

#include<iostream>
#include<string>
#include"MachinePets.h"
#include"PetCats.h"
using namespace std;
PetCats::PetCats(const string s):MachinePets(s){
}
string PetCats::talk(){
    return "miao wu~";
}

petdogs.h

#ifndef PETDOGS_H
#define PETDOGS_H
#include"MachinePets.h"
using namespace std;
#include<string>
class PetDogs:public MachinePets{
public:
    PetDogs(const string s);
    string talk();
};
#endif

petdogs.cpp

#include<iostream>
#include<string>
#include"PetDogs.h"
#include"MachinePets.h"
using namespace std;
PetDogs::PetDogs(const string s):MachinePets(s){
    
}
string PetDogs::talk(){
    return "wang wang~";
}

对纯虚数还不太理解,以至于开始的时候在两个派生类中没有声明虚函数的函数,还要继续努力。

posted on 2019-06-04 20:13  吵闹机器人  阅读(170)  评论(1编辑  收藏  举报