实验五——类的多态,继承和派生2

Posted mxueyyqx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验五——类的多态,继承和派生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。

 

以上是关于实验五——类的多态,继承和派生2的主要内容,如果未能解决你的问题,请参考以下文章

实验五 类的继承派生和多态

实验4 类的继承派生和多态

[实验6]类的继承与多态

c++实验四 类的继承派生和多态

实验四 类的继承派生和多态

C#程序设计 继承和多态实验