验证性实验一
第一个是将派生类变成了基类,第二个则是因为虚函数的存在,派生类不会变为基类。
验证性实验二
由于有纯虚数的存在,三个派生类可以用同一个函数实现三个派生类各自的需要,比较方便。
实验三
mian.cpp
#include#include #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 "< <
machinepet.h
#ifndef MACHINEPETS_H#define MACHINEPETS_H#include#include 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 #include"MachinePets.h"using namespace std;string MachinePets::getnickname(){ return nickname;}
petcats.h
#ifndef PETCATS_H#define PETCATS_H#include"MachinePets.h"#includeusing namespace std;class PetCats:public MachinePets{public: PetCats(const string s); string talk();};#endif
petcats.cpp
#include#include #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;#includeclass PetDogs:public MachinePets{public: PetDogs(const string s); string talk();};#endif
petdogs.cpp
#include#include #include"PetDogs.h"#include"MachinePets.h"using namespace std;PetDogs::PetDogs(const string s):MachinePets(s){ }string PetDogs::talk(){ return "wang wang~";}
对纯虚数还不太理解,以至于开始的时候在两个派生类中没有声明虚函数的函数,还要继续努力。