实验五——类的多态,继承和派生2
Part1:验证型实验
1.在派生类函数中,如果是使用对象名.成员名进行访问,则最后运行结果是访问每一个派生类中的成员函数;
2.如果是通过指针来进行访问那么只会访问base1当中的成员函数,因为第一个程序里的BASE1并没有虚函数,所以base2和derived中的成员函数无法将其覆盖,所以只能访问指针当面默认指向的BASE1的成员函数,然而第二个程序使用了虚函数,虚函数的作用是通过指向派生类的基类指针或引用,访问派生类中同名覆盖成员函数,第二个程序中的base1使用虚函数virtual,即此成员函数可被覆盖。
Part2:验证性实验
理解抽
Part3:简单编程练习
1 #include<iostream> 2 #include<string> 3 #include<cstdlib> 4 #include"MachinePets.h" 5 #include"PetCats.h" 6 #include"PetDogs.h" 7 8 using namespace std; 9 10 11 12 void play(MachinePets *pet) 13 { 14 cout<<pet->getNickname()<<pet-> talk()<<endl; 15 } 16 17 int main() 18 { 19 PetCats cat("miku"); 20 PetDogs dog("dahuang"); 21 play(&cat); 22 play(&dog); 23 24 return 0; 25 }
1 #ifndef MACHINEPETS_H 2 #define MACHINEPETS_H 3 4 #include<string> 5 using namespace std; 6 7 class MachinePets{ 8 public: 9 MachinePets(const string s); 10 virtual string talk() const=0; 11 string getNickname(); 12 private: 13 string nickname; 14 }; 15 #endif
#include"MachinePets.h" #include<string> using namespace std; MachinePets::MachinePets(const string s):nickname(s){ } string MachinePets::getNickname(){ return nickname; }
1 #ifndef PETCATS_H 2 #define PETCATS_H 3 4 #include"MachinePets.h" 5 #include<string> 6 using namespace std; 7 8 class PetCats:public MachinePets{ 9 public: 10 PetCats(const string s); 11 string talk()const; 12 }; 13 #endif
1 #include<iostream> 2 #include<string> 3 #include"PetCats.h" 4 using namespace std; 5 6 PetCats::PetCats(const string s):MachinePets(s){ 7 8 } 9 string PetCats::talk()const{ 10 return "says miao wu~"; 11 }
1 #include<iostream> 2 #include<string> 3 #include"MachinePets.h" 4 using namespace std; 5 #ifndef PETDOGS_H 6 #define PETDOGS_H 7 8 9 class PetDogs:public MachinePets{ 10 public: 11 PetDogs(const string s); 12 string talk()const; 13 }; 14 #endif
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 #include"PetDogs.h" 5 PetDogs::PetDogs(const string s):MachinePets(s){ 6 7 } 8 string PetDogs::talk()const{ 9 return "says wang wang~"; 10 }
实验结论:在写这个程序时,我刚开始一直尝试插入音乐,但是每次都没有成功,而且报错如图
后来有进行改进程序,插入一段音乐后缀为.wav,然而还是有报错,类似于上面的报错,最后还是没有成功,我就放弃了这个想法,只写了最基本的。写这个程序的方法还是蛮多的,不仅限于这一种。为了不让运行框闪现还可以加一句system("pause")的头文件cstdlib。
评论:
https://www.cnblogs.com/Airlies/p/10972864.html
https://www.cnblogs.com/Tiger-Hu22/p/10962464.html
https://www.cnblogs.com/Kun-520/p/10960321.html