1.继承和多态基础知识

菱形继承需要用vitual关键字防止内存的重复使用,多态主要有静态多态和动态多态。

静态多态主要是在调用过程中函数的重载,在编译阶段前就确定函数地址。

动态多态实在运行阶段才确定函数的地址。动态多态主要实在父类的指针指向子类开辟的堆区指针的时候使用,可以使得以此方式调用子类的时候不至于出现混淆调用的情况。

纯虚函数的使用,在编程时能够使得代码更加清晰,且可读性强。对于析构的多态使用,能使得子类析构函数的内存得到释放,需要加上virtual关键字修饰。在水上飞机例题中调用virtural可以了解到子类和父类调用的顺序,在函数重载中使得代码结构清晰。

下面是c++继承和多态的经典示例水上飞机问题:

class CRAFT
{
protected:double speed;
public:CRAFT(double m_speed)//注意这个地方有一个引用{speed=m_speed;cout<<"创建航行器(速度: "<<speed<<")"<<endl;}virtual void Show(){cout<<"航行(速度: "<<speed<<")"<<endl;}virtual ~CRAFT(){cout<<"销毁航行器(速度: "<<speed<<")"<<endl;}};
class PLANE:virtual public CRAFT
{
protected:double width;
public:PLANE(double m_speed,double m_width):CRAFT(m_speed),width(m_width){cout<<"创建飞机(翼展: "<<width<<")"<<endl;}virtual void Show(){cout<<"航行(速度: "<<speed<<","<<" 翼展: "<<width<<")"<<endl;}virtual ~PLANE(){cout<<"销毁飞机(翼展: "<<width<<")"<<endl;}};
class SHIP:virtual public  CRAFT
{
protected:double depth;
public:SHIP(double m_speed,double m_depth):CRAFT(m_speed),depth(m_depth){cout<<"创建船(吃水: "<<depth<<")"<<endl;}virtual void Show(){cout<<"航行(速度: "<<speed<<", 吃水: "<<depth<<")"<<endl;}virtual ~SHIP(){cout<<"销毁船(吃水: "<<depth<<")"<<endl;}
};
class SEAPLANE:public PLANE,public SHIP
{public:SEAPLANE(double m_speed,double m_width,double m_depth):CRAFT(m_speed),PLANE(m_speed,m_width),SHIP(m_speed,m_depth){cout<<"创建水上飞机"<<endl;}virtual void Show(){cout<<"航行(速度: "<<speed<<", 翼展: "<<width<<", 吃水: "<<depth<<")"<<endl;}virtual ~SEAPLANE(){cout<<"销毁水上飞机"<<endl;}
};

C++基础继承和多态(水上飞机)相关推荐

  1. Python基础——继承、多态

    文章目录 一.slots 二.私有属性和私有方法 三.继承 1.私有属性.私有方法 2.继承的特点(多层继承) 3.新式类和经典类 四.方法的重写 五.多态 一.slots __slots__属性对应 ...

  2. java继承和多态_Java基础继承与多态

    Java基础第九天 继承概述 引入 首先我来写两个代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15//定义学生类 class Student { public void  ...

  3. 封装 继承 多态_Java基础知识——封装、继承、多态

    1 基本概括 2 详解 封装: 是将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问 封装的优点:只能通过规定的方式来访问数据:隐藏类的实现细节: ...

  4. java写一个外网访问的接口_【JAVA基础】一个案例搞懂类、对象、重载、封装、继承、多态、覆盖、抽象和接口概念及区别(中篇)...

    0 前言 初学JAVA时,总会对一些概念一知半解,相互混淆,不明其设计的用意,如类.对象.重载.封装.继承.多态.覆盖.抽象类.接口概念.为便于理解和巩固,本文将基于一个案例及其变形,展现各个概念的定 ...

  5. Python基础day09【面向对象(封装、继承、多态)、重写、私有权限】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day09[面向对象(封装.继承.多态).重写.私有权限] Python基础day ...

  6. Java基础篇:封装、继承、多态三大特性

    目录: 一.Java三大特性之:封装 二.Java三大特性之:继承 三.Java三大特性之:多态 一.Java三大特性之:封装 1.什么是封装: 封装,就是将数据和基于数据的操作封装在一起,数据被保护 ...

  7. java 继承与多态 习题_JAVA基础 第4章继承与多态_练习题_200910

    Java基础第4章练习题大外软件学院 第4章继承与多态 一.选择题 1. 编译和运行以下两文件结果是( D ). //文件P1.java package MyPackage; class P1{ vo ...

  8. 多重继承_Python 和 Java 基础对比 10 —— 类的封装、继承和多态

    @Python大星 一.Python 类的封装.继承和多态 封装 继承 Python 支持多父类的继承机制,所以需要注意圆括号中基类的顺序,若是基类中有相同的方法名,并且在子类使用时未指定,Pytho ...

  9. C++设计模式-继承与多态影响耦合性(最基础的简单工厂模式小实例)

    继承与多态影响耦合性(最基础的简单工厂模式小实例) 原理: 通过继承和虚函数的方式修改某个子类对应函数的功能: 通过简单工厂模式到底实例化谁; 如果要增加复杂的运算只有增加响应的子类,以及工厂的分支即 ...

最新文章

  1. 交换机SHOW命令,不知道路由器可以参考不·
  2. ACL-文件访问控制列表
  3. redis 经纬度_原来用Redis实现查找附近的人这么容易
  4. saxon java_如何将Saxon设置为Java中的Xslt处理器?
  5. 让latex写论文更方便的几个工具
  6. 人工智能定会的录取率也不过百分之29
  7. php编程实现单入口,apache配置php实现单一入口方法
  8. windows创建进程的过程
  9. 为什么说 Transformer 就是图神经网络?
  10. c++线程间通信的几种方法_JAVA并发之线程amp;进程
  11. Modelica技术教程 | 状态机教程
  12. 基金训练营学习笔记4-指数基金
  13. 老板拖欠工资怎么办?
  14. 爱博精电亮相四川省节能环保品牌推广全川行——乐山站
  15. ios:应用发布App Store流程
  16. Python 学到什么程度才可以去找工作?掌握这 4 点足够了!
  17. 减肥(2014.6.28 22:48)
  18. 【x86架构】SMM
  19. 【98期】面试官:给我说说你对Java GC机制的理解?
  20. 【财务分析】从老板的角度制定财务分析报表

热门文章

  1. SQL Server 数据库之身份验证和访问控制
  2. 红亚太学链之区块链技术深度剖析第9章
  3. 元·认知·人机环·渔樵耕读
  4. 叶君—国画大师笔下的“忠义千秋”
  5. android10暗色适配,Android沉浸式状态栏,支持状态栏渐变色,纯色, 全屏,亮光、暗色模式,适配android 4.4 -10.0机型...
  6. mysql三表关联查询
  7. 学生、课程、成绩三表sql查询
  8. antd页面多表单校验
  9. 【射影几何01】 射影几何介绍
  10. 利用flex布局在父元素和子元素宽高不明的情况下设置某一子元素剩余父元素的宽高