1. 多态

    • 编译时多态:重载
    • 运行时多态:虚函数。根据运行时的类别获取正确的虚指针,从而定位正确的虚函数。
  2. 虚函数
    • 虚函数指针:指向虚函数表。多重继承则含有多个基类的虚函数指针。
    • 虚函数表:函数指针集合。普通继承,子类沿用父类的虚函数表,可以修改基类的虚函数表。
    • 注意:虚函数依赖虚指针,虚指针位于对象内存空间。因此,多态在构造函数之后。
  3. 多重继承
    • 优点:使用多个基类的接口。基类构造顺序与继承列表一致,与初始化列表无关。
    • 问题:冗余基类导致的二义性。
    • 解决方案:虚继承
  4. 虚继承
    • vitual class ××
    • 虚基类指针,每个类有且仅有一个虚基类指针。
    • 注意:虚继承的虚函数表不可以增加,所以子类维护自己的虚函数指针。
  5. 纯虚函数
    • 抽象基类:包含纯虚函数的类,这种类不可以实例化对象(存在未定义的函数)。
    • 纯虚函数和虚函数:1)虚函数不强制子类重写,仅仅为了支持多态。2)纯虚函数主要在于设置接口形式,必须为子类实现。另外,会导致对象不可以实例化。
  6. 总结虚函数指针的问题:
    • 单继承:一个虚函数指针
    • 多重继承:多个虚函数指针,若增加新的虚函数,则修改第一基类的虚函数表
    • 单虚继承:一个虚函数指针,若增加新的虚函数,则为子类增加一个虚函数指针
    • 多重虚继承:多个虚函数指针,若增加新的虚函数,则为子类增加一个虚函数指针

C/C++程序基础 (七)继承和多态的更多相关文章

  1. iOS开发-OC语言 (七)继承、多态、类别

    继承.多态.类别 学习目标 1.继承的含义 2.父类子类的别称 3.字段和消息的继承 4.重写和重写消息的调用 5.多态 6.类别(Category) ======================== ...

  2. C++_基础_继承、多态

    内容: (1)子类中的拷贝构造和拷贝赋值 (2)多继承和虚继承 (3)多态的初识 (4)虚析构的特性和使用 (5)多态的底层实现 (6)纯虚函数.抽象类的概念 1.子类中的拷贝构造和拷贝赋值 子类中的 ...

  3. 编写Java程序,以继承和多态思想模拟饲养员喂养不同动物的不同行为

    返回本章节 返回作业目录 需求说明: 以继承和多态思想模拟饲养员喂养不同动物的不同行为 动物园有饲养员和动物,其中动物有老虎.马.猴子.羊.狼等. 饲养员对不同的动物有不同的喂养行为. 实现思路: 以 ...

  4. C#基础强化-继承与多态

    /**  特性:    单根性:一个子类只能有一个父类    传递性:爷爷类 爹类 儿子类  里氏转换    1.子类可以赋值给父类    2.如果父类装的是子类对象,则可以将这个父类转换为对应的子类 ...

  5. C#基础总结之八面向对象知识点总结-继承与多态-接口

    .方法深入讲解(返回值,形参与实参) 方法 public int getName(int i,int j) { int sum = i + j; return sum; } .利用泛型存储对象数据 . ...

  6. Python3 与 C# 面向对象之~继承与多态 Python3 与 C# 面向对象之~封装 Python3 与 NetCore 基础语法对比(Function专栏) [C#]C#时间日期操作 [C#]C#中字符串的操作 [ASP.NET]NTKO插件使用常见问题 我对C#的认知。

    Python3 与 C# 面向对象之-继承与多态   文章汇总:https://www.cnblogs.com/dotnetcrazy/p/9160514.html 目录: 2.继承 ¶ 2.1.单继 ...

  7. Java基础之浅谈继承、多态

    一.继承的理解 继承:简单通俗的来讲,继承就是一个类继承另一个类,通常用extends表示继承. 继承的类叫子类,被继承的类叫父类. 子类可以使用父类的变量和方法,同时也可以重写父类的方法. 在Jav ...

  8. Java学习之旅基础知识篇:面向对象之封装、继承及多态

    Java是一种面向对象设计的高级语言,支持继承.封装和多态三大基本特征,首先我们从面向对象两大概念:类和对象(也称为实例)谈起.来看看最基本的类定义语法: /*命名规则: *类名(首字母大写,多个单词 ...

  9. JAVA基础——面向对象三大特性:封装、继承、多态

    JAVA面向对象三大特性详解 一.封装 1.概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: 只能通过规定的方法访问数据. ...

  10. Java基础知识回顾之三 ----- 封装、继承和多态

    前言 在上一篇中回顾了java的修饰符和String类,这篇就来回顾下Java的三大特性:封装.继承.多态. 封装 什么是封装 在面向对象程式设计方法中,封装是指一种将抽象性函式接口的实现细节部份包装 ...

随机推荐

  1. win10的一些设置

    win10进入安全模式: 左下角->设置->更新和安全->恢复->立即重启  (重启后进入的界面可以进行一些设置来进入安全模式) win10切换账户: 任务管理器->账户

  2. Java面向对象_对象一一对应关系和this关键字

    一.打个比方,一个人有一个身份证号,一个身份证号对应一个人.一个英雄对应一把武器,一把武器对应一个英雄.生活中很多对象都存在一一对应关系,那么一一对应关系在代码中是如何实现的呢?举个例子,英雄和武器一 ...

  3. string去空格方法

    String str = " asd "; String ntr = ("A" + str).trim().substring(1);//将头部加一个字符再用t ...

  4. ElasticSearch最新版本下载地址

    直接访问官方很慢,打不开,找到这个下载方法: ElasticSearch下载地址: https://download.elastic.co/elasticsearch/elasticsearch/el ...

  5. SQLServer2008 开启远程连接

    关闭防火墙 基本的设置可以参考下面的链接: http://wenku.baidu.com/link?url=qjZKZCCoa5T3EGd_rqSjl6Tuhb1wYjIHyXri630QxuAIKu ...

  6. 关于Mdi窗口-父窗口上的控件把子窗口的挡住的问题

    using System.Runtime.InteropServices; [DllImport("user32")] public static extern int SetPa ...

  7. JFrame 文本打印

    package tools; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import jav ...

  8. 渐进式jpeg(progressive jpeg)图片及其相关

    最近看有些网站上的jpg格式的图片在呈现的时候,有两种方式,一种是自上而下扫描式的,还有一种就是先是全部的模糊图片,然后逐渐清晰(就像GIF格式的交错显示). 一.基本JPEG(baseline jp ...

  9. C#值类型、引用类型的区别

    在<C#类型简述>http://blog.csdn.net/letnet1981/article/details/48223831,中提到了值类型和引用类型,这里我们就来了解一下它们的区别 ...

  10. 《Python高效开发实战》实战演练——开发Django站点1

    6.2 实战演练:开发Django站点 用Django开发网站需要遵循Django的一套开发流程.本节通过建立一个消息录入页面演示Django的开发流程及相关技术. 6.12.1  建立项目 在进行D ...