实验五——类的多态,继承和派生2(代码片段)

mxueyyqx mxueyyqx     2022-12-15     140

关键词:

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。

 

实验五类的继承派生和多态(代码片段)

一、验证性实验1.在多层继承中,派生类中出现与基类同名成员时,通过对象名.成员名的方式,访问的成员什么?     对象名.成员名:派生类对象2.通过基类指针访问派生类对象时,基类中成员函数有无关键字... 查看详情

实验4类的继承派生和多态(代码片段)

实验目的 1.理解类的继承和派生机制2.掌握派生类的定义和使用3.理解和掌握派生类成员的标识和访问中同名覆盖原则、二元作用域分辨符和虚基类的用法4.掌握派生类构造函数和析构函数的定义及调用次序5.理解运算符重载... 查看详情

[实验6]类的继承与多态(代码片段)

一、实验目的1.理解类的继承和派生机制2.掌握派生类的定义和使用3.掌握派生类成员的标识与访问中同名覆盖原则、二元作用域分辨符和虚基类的用法4.掌握派生类构造函数和析构函数的定义及调用次序5.理解运算符重载的目的... 查看详情

c++实验四类的继承派生和多态(代码片段)

实验目的1.理解类的继承和派生机制2.掌握派生类的定义和使用3.理解和掌握派生类成员的标识和访问中同名覆盖原则、二元作用域分辨符和虚基类的用法4.掌握派生类构造函数和析构函数的定义及调用次序5.理解运算符重载的目... 查看详情

实验四类的继承派生和多态(代码片段)

一、实验内容1、车辆基本信息管理基于Car类派生出ElectricCar类、派生类ElectricCar中新增数据成员Battery类对象。#ifndefBATTERY_H#defineBATTERY_HclassBatterypublic:Battery(intbatterySize0=70);intgetSize();private:intbatterySize;;#endifbatter 查看详情

类的继承和多态(代码片段)

继承1、什么是继承?继承是一种新建类的方式新建的类称之为类或者派生类,父类又可以称之为基类或者超类子类会‘遗传’父类的属性继承是类与类之间的关系,寻找这种关系需要先抽象再继承2、为什么要用继承减少代码冗... 查看详情

类的继承派生组合菱形的继承多态(代码片段)

类的继承继承是一种新建的类的方式,新建的类成为子类,被继承的类称为父亲继承的特性是:子类会遗传父亲的属性继承是类与类之间的关系使用继承目的,可以减少代码的咒余在python中,父类和子类只有在继承的时候才会产... 查看详情

类的继承菱形继承派生多态(代码片段)

一、类的继承(查找顺序先自己再父类)classParentFoo:def__init__(self,first_name,car,money,house):self.first_name=first_nameself.car=carself.money=moneyself.house=housedefteach(self):print("%s教人"%self.first_nam 查看详情

大话设计模式封装继承多态(代码片段)

...处继承概念那什么是基类和派生类呢?1、基类和派生类的基本概念2、调用基类的构造函数学习继承需记住继承的优点继承的缺点多态概念注意多态的原理虚方法概念虚方法的使用方法重写封装概念每个对象都包含它能进行... 查看详情

bingc(继承)(代码片段)

...对象的赋值转换----赋值兼容规则----继承中的作用域派生类的默认成员函数基类哪些成员被子类继承了多继承菱形继承解决方案:1.明确化2.虚拟继承(用在菱形继承中解决菱形继承中存在的二义性问题)(重)... 查看详情

bingc++(继承)(代码片段)

...对象的赋值转换----赋值兼容规则----继承中的作用域派生类的默认成员函数基类哪些成员被子类继承了多继承菱形继承解决方案:1.明确化2.虚拟继承(用在菱形继承中解决菱形继承中存在的二义性问题)(重)... 查看详情

面向对象进阶1(代码片段)

目录类的继承什么是继承为什么要继承对象的继承类的查找顺序类的派生派生方法一派生方法二类的组合菱形继承问题类的分类新式类经典类菱形继承问题类的多态与多态性多态多态性多态性的好处类的继承什么是继承继承就是... 查看详情

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

这里是程序设计完全小白一枚……跪求大神帮忙!!实验目的要求见下,回答请帮忙给出完整且可以在VS05及更高版本运行的C#代码,非常感谢!满意的财富值会追加!!(如果可以请顺便看看我的另一个问题……再次跪谢!!继... 查看详情

day5-2类的继承和派生,重用(代码片段)

类的继承派生在子类中重用父类组合   定义:继承指的是类与类之间的关系,是一种什么“是”什么的关系,继承的功能之一就是用来解决代码重用问题.继承是一种创建新类的方式,在python中,新建的类可以继承一个... 查看详情

c++继承(代码片段)

...二、父类和子类对象赋值转换三、继承的作用域四、派生类的默认成员函数五、继承和友元六、继承与静态成员七、菱形继承和菱形虚拟继承前言:我们先来回忆一下面向对象的三大特性。1.封装(更好的管理)2.继承(是一种复... 查看详情

c++继承(代码片段)

...继承中的作用域1.同名成员变量2.同名成员函数四、派生类的默认成员函数1.构造函数2.拷贝构造3.赋值运算符重载4.析构函数五、友元和静态成员六、菱形继承1.继承 查看详情

理解多态的语法使用以及多态的实现原理(代码片段)

...)2.5虚函数重写的两个例外2.5.1协变(基类与派生类的虚函数返回值类型不同。)2.5.2派生类的虚函数可以不加virtual2.5.2.1例题2.5.3析构函数的重写(基类与派生类析构函数的名字不同,编译后内部是相同的)2.6C+... 查看详情

通过基类的指针或引用调用虚函数构成多态(代码片段)

...++多态的实现是利用虚函数完成的,派生类对基类的虚函数重写,通过基类的指针或引用调用虚函数来实现多态的特性。本问重点讨论为什么必须是通过基类的指针或引用调用虚函数才能构成多态?我们将按照... 查看详情