首先,这里提到的继承都是公用继承。

派生类

1、派生类需要添加自己的构造函数。

2、派生类创建之前会首先创建基类对象,即调用基类构造函数。在派生类构造函数后通过初始化列表将参数传递给基类构造函数。

3、派生类的构造函数主要用于初始化新增的数据成员。

4、释放对象时与创建相反,先调用派生类的析构函数再调用基类的析构函数。

关于派生类的使用:

1、派生类可以使用基类的非私有方法。

2、派生类不能访问基类的私有成员。

另外:

1、基类指针可以指向派生类。

2、基类引用可以引用派生类对象。

但是这种基类指针、引用只能使用基类的方法,不能使用派生类独有的方法。

隐藏

基类和派生类同名的成员函数,无论参数是否相同,只要同名都构成隐藏。

此时派生类实例化的对象默认使用派生类的成员函数,若要使用基类下的同名函数要如此使用:children.Father::function();

同名的成员变量同理。

多态公有继承

实现有两种方法:

1、使用virtual 虚方法。

2、在派生类中重新定义基类的方法。

virtual的意义

没有virtual,根据引用类型或者指针类型选择调用的方法。

有virtual,根据引用或者指针指向的对象的类型选择调用的方法。

析构函数通常是virtual的,这可以保证析构函数被正确地调用。

静态联编与动态联编

联编:编译器将源代码中的函数调用解释为执行特定的函数代码。

静态联编:编译过程中进行联编。

动态联编:运行时决定使用哪个方法。编译器对虚方法使用动态联编。

虚函数表

只有类中有虚函数的类才会有虚函数表。以下摘自http://www.cnblogs.com/Ripper-Y/archive/2012/05/15/2501930.html

图中vtable就是该类的虚函数表。

可以看到,如果派生类中没有重新定义基类中的虚函数,则虚函数表中仍然保存的是原始版本的虚函数。

以下图片及资料来自:http://blog.csdn.net/haoel/article/details/1948051/

在多重继承时:

左为继承关系,右为一个子类实例中的虚表。

  

1、子类实例中的虚函数表中每个父类都有一个自己的虚表,而且子类独有的虚函数放在第一个父类的虚表中。

2、子类在重新定义父类中有的虚函数时,会同时覆盖所有虚表的该虚函数。

抽象基类

有纯虚函数的类是一个抽象基类,只能作为基类,不能创建实例,其它的类成员函数可以定义。纯虚函数声明类似 virtual fun() = 0;

C++拾遗(十一)类继承的更多相关文章

  1. Python基础(十一) 类继承

    类继承: 继承的想法在于,充份利用已有类的功能,在其基础上来扩展来定义新的类. Parent Class(父类) 与 Child Class(子类): 被继承的类称为父类,继承的类称为子类,一个父类, ...

  2. 《C++ Primer Plus》读书笔记之十一—类继承

    第十三章 类继承 1.类继承:扩展和修改类. 2.公有继承格式:冒号指出B类的基类是A,B是派生类. class B :public A { ... }: 3.派生类对象包含基类对象.使用公有派生,基 ...

  3. Core Java (十一) Java 继承,类,超类和子类

    Core Java (十一) Java 继承,类,超类和子类 标签: javaJavaJAVA 2013-01-22 17:08 1274人阅读 评论(0) 收藏 举报  分类: java(58) 读 ...

  4. Programming In Scala笔记-第十一章、Scala中的类继承关系

    本章主要从整体层面了解Scala中的类层级关系. 一.Scala的类层级 在Java中Object类是所有类的最终父类,其他所有类都直接或间接的继承了Object类.在Scala中所有类的最终父类为A ...

  5. 快学Scala 第十一课 (类继承)

    类继承: class People { } class Emp extends People{ } 和Java一样,final的类不能被继承.final的字段和方法不能被override. 在Scal ...

  6. Java12-java语法基础(十一)继承

    Java12-java语法基础(十一)继承 一.继承 学习要求: 1. 理解继承的概念与作用 2. 掌握继承的实现机制 3.理解继承中的覆写与覆盖 4.掌握super关键字的使用 回顾: 1.对客观世 ...

  7. javascript类继承的一些实验

    其实一开始编js没怎么用过对象,一般都用func,func,func···但是用多了,感觉代码一点都不美观,还要这里包一个函数,那里包一个函数,或者一直都是函数调用,不好看,而且一些重用的都要重写的话 ...

  8. C++ 类继承的对象布局

    C++多重继承下,对象布局与编译器,是否为虚拟继承都有很大关系,下面将逐一分析其中的差别,相同点为都按照类继承的先后顺序布局(类内按照虚表.成员声明先后顺序排列).该类情况为子类按照继承顺序排列,如c ...

  9. C++中public,protected,private派生类继承问题和访问权限问题

    C++中public,protected,private派生类继承问题和访问权限问题 当一个子类从父类继承时,父类的所有成员成为子类的成员,此时对父类成员的访问状态由继承时使用的继承限定符决定. 1. ...

  10. Javascript类继承-机制-代码Demo【原创】

    最近看到<Javascript设计模式>,对js模拟的”继承方式“有了更深一步的了解,虽然之前也总是用到prototype.new ,但只是知其然不知所以然,现在将类继承的方法整理如下,暂 ...

随机推荐

  1. 【转】 Ubuntu samba服务器搭建及测试--不错

    原文网址:http://blog.csdn.net/longfeey/article/details/5937968 Ubuntu samba服务配置是很不错的文件应用很有学习价值, 这里我主要讲解U ...

  2. NET设计模式(2):单件模式(Singleton Pattern)[转载]

    单件模式(Singleton Pattern) ——.NET设计模式系列之二 Terrylee,2005年12月07日 概述 Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问 ...

  3. javascript 关闭窗口,弹出新窗口并带有确认关闭对话框解决办法

    在很多人眼里,北京是一个物欲横流的社会,生活节奏之快,让你一丝都不能停下来,走在路上伴随着人群急速往前涌,或许有些人都不知道要去哪.也不知道自己想要的是什么?在一个浮躁的社会里,多了一些浮躁的人,到处 ...

  4. Swift基础语法学习总结一

    1.基础 1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift使用print和println打印,它的传参是一个泛型,几乎所有类型都是可打印的. ...

  5. Java的多线程(上)

    多线程的优点和必要性是不言而喻的. 三种方法实现多线程 1. 继承Thread class A extends Thread{ public void run() {...} } 使用时, new A ...

  6. 如何安装Windows 8系统中的telnet组件

    知识点分析:Window 8 系统中Telnet没有默认安装,成为了一个可选组件,“启用或关闭Windows功能”下即可添加此组件. 操作步骤:1.系统桌面下同时按住键盘上 “Windows” 和“X ...

  7. python Eve RESTFul 尝试笔记

    0.前言 最近重点研究了yeelink平台的原理和使用,yeelink平台和多数云平台设计一样应用了RESTFul框架.嵌入式侧(或者是客服端侧)的相关技术研究的比较充分(个人这么认为),是不是该弄弄 ...

  8. Cocos2D-X2.2.3学习笔记12(瞬间动作)

    到眼下我们已经学习了有 坐标系统 内存管理 UI系统 事件处理 几何图形 今天我们来学习动作管理OK 我们来看看类结构图 CCAction   全部动作的基类 以下派生了三个子类:CCFiniteTi ...

  9. Android进程机制

    以下资料摘录整理自老罗的Android之旅博客,是对老罗的博客关于Android底层原理的一个抽象的知识概括总结(如有错误欢迎指出)(侵删):http://blog.csdn.net/luosheng ...

  10. 用Hexo搭建属于自己的Blog

    什么是Hexo 简单的来说,Hexo是一款基于Node.JS的静态博客框架,官方给它的描述是"A fast, simple & powerful blog framework&quo ...