第五次实验
验证性实验一
第一个是将派生类变成了基类,第二个则是因为虚函数的存在,派生类不会变为基类。
验证性实验二
由于有纯虚数的存在,三个派生类可以用同一个函数实现三个派生类各自的需要,比较方便。
实验三
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~"; }
对纯虚数还不太理解,以至于开始的时候在两个派生类中没有声明虚函数的函数,还要继续努力。