第五次实验

验证性实验一

第五次实验_第1张图片第五次实验_第2张图片

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

验证性实验二

第五次实验_第3张图片

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

实验三

mian.cpp

#include
#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<" says "<endl;
}

machinepet.h

#ifndef MACHINEPETS_H
#define MACHINEPETS_H
#include
#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
#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
using namespace std;
class PetCats:public MachinePets{
public:
	PetCats(const string s);
	string talk();
};
#endif

petcats.cpp

#include
#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
#include<string>
#include"PetDogs.h"
#include"MachinePets.h"
using namespace std;
PetDogs::PetDogs(const string s):MachinePets(s){
    
}
string PetDogs::talk(){
    return "wang wang~";
}

第五次实验_第4张图片

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

你可能感兴趣的:(第五次实验)