实验五——类的多态,继承和派生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
machinepets.h
#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
petcats.h
 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 }
petcats.cpp
 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
petdogs.h
 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 }
petsdogs.cpp
 

实验结论:在写这个程序时,我刚开始一直尝试插入音乐,但是每次都没有成功,而且报错如图

后来有进行改进程序,插入一段音乐后缀为.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

 

posted on 2019-06-02 17:03  山海yyqx  阅读(251)  评论(2编辑  收藏  举报