实验五——类的多态,继承和派生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/mxueyyqx/p/10963449.html

时间: 2024-07-31 12:38:11

实验五——类的多态,继承和派生2的相关文章

实验五--类的继承派生多态二次练习

实验目的 1. 理解运行时多态 2. 掌握虚函数和抽象类 实验准备 1. 概念 多态,运行时多态 虚函数, 纯虚函数, 抽象类 2. 语法和应用 虚函数的定义和使用纯虚函数.抽象类的定义和使用 实验内容 设计并实现一个机器宠物类MachinePets. 每个机器宠物有如下信息:昵称(nickname) 每个机器宠物有如下成员函数: 带参数的构造函数MachinePets(const string s) ,为机器宠物初始化昵称. 纯虚函数string talk()为机器宠物派生类提供宠物叫声的统一

一步一步学习C++(类)之继承与派生

// PaiShengAndDerive.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <string.h> class Teacher { public: Teacher(const char *s,int x,int n) { strcpy(MathTeaName,s); ClassRoom = x; TeaYear = n; printf("基类构造函数!\n"); } void disp

实验五 类和对象-3 zxt

实验一:运行ex1.cpp 实验二:ex2.cpp   实验三:补全ex3.cpp并运行 我以为是自己喜欢和不喜欢的呢...... 实验四:习题6-17 实验五:习题6-18 实验六:matrix类 我智障的没看见matrix.h,自己写的matrix,我都要写傻了,还运行不出来......求解决 实验七:期中考试第一题 写完突然意识到,忘了释放,要不然会造成内存泄漏,会有很严重的后果,尴尬 我真是老年人的脑袋,啥都忘...... 修改以后如下: 实验八:期中考试第二题 当密码输入错误时 实验九

实验五 类的继承、派生和多态(2)

一.验证性实验 1. 在多层继承中,派生类中出现与基类同名成员时,通过对象名.成员名的方式,访问的成员什么? 对象名.成员名:派生类对象 2. 通过基类指针访问派生类对象时,基类中成员函数有无关键字virtual,访问的成员分别是什么? 基类指针:有关键字时访问派生类,无关键字访问基类对象 二.编程练习 1.设计并实现一个机器宠物类MachinePets #include<iostream> #include<string> using namespace std; class M

类的继承与派生

继承与派生 在教材中给出的对类的继承和派生的解释: "类的继承,是新的类从已有类那里得到已有的特性." "从已有的类产生新类的过程就是类的派生." 新的类是基类的派生类,新的类从基类处得到已有的特性. 一.继承与派生举例 新的类是基类的派生类,新的类从基类处得到已有的特性. 例1.写一个类student,再写一个Student类的派生类Undergraduate. 代码: #define _CRT_SECURE_NOWARNINGS #include<iost

06_继承与派生

一:继承的概念 面向对象程序设计有 4 个主要特点:抽象.封装.继承和多态性.我们已经讲解了类和对象,了解了面向对象程序设计的两个重要特征一数据抽象与封装,已经能够设计出基于对象的程序,这是面向对象程序设计的基础. 要较好地进行面向对象程序设计,还必须了解面向对象程序设计另外两个重要特征——继承性和多态性.继承性是面向对象程序设计最重要的特征,可以说,如果没有掌握继承性,就等于没有掌握类和对象的精华,就是没有掌握面向对象程序设计的真谛. (1)类之间的关系 has-A, uses-A 和 is-

实验4 类的继承、派生和多态(1)

实验目的 1. 理解类的继承和派生机制 2. 掌握派生类的定义和使用 3. 理解和掌握派生类成员的标识和访问中同名覆盖原则.二元作用域分辨符和虚基类的用法 4. 掌握派生类构造函数和析构函数的定义及调用次序 5. 理解运算符重载的目的,掌握运算符重载函数的编写方法 实验准备 1. 类的继承和派生 引入继承和派生机制的目的 基本概念:继承.派生.基类.直接基类.间接基类 .派生类 语法 派生类定义的语法格式(单重继承和多重继承) 派生类构造函数及其初始化列表书写形式 派生类成员的标识与访问 同名覆

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

实验目的 1. 理解类的继承和派生机制 2. 掌握派生类的定义和使用 3. 理解和掌握派生类成员的标识和访问中同名覆盖原则.二元作用域分辨符和虚基类的用法 4. 掌握派生类构造函数和析构函数的定义及调用次序 5. 理解运算符重载的目的,掌握运算符重载函数的编写方法 实验内容 一.ElectricCar类 #ifndef BATTERY_H #define BATTERY_H class Battery { public: Battery(int nb = 70); int showbattery

类的继承、菱形继承、派生、多态

一.类的继承(查找顺序先自己再父类) class ParentFoo: def __init__(self,first_name,car,money,house): self.first_name=first_name self.car=car self.money=money self.house=house def teach(self): print("%s教人"%self.first_name) # f1=ParentFoo('zhu','tesla',10,'Haozhai'