C++拾遗(十一)类继承
首先,这里提到的继承都是公用继承。
派生类
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++拾遗(十一)类继承的更多相关文章
- Python基础(十一) 类继承
类继承: 继承的想法在于,充份利用已有类的功能,在其基础上来扩展来定义新的类. Parent Class(父类) 与 Child Class(子类): 被继承的类称为父类,继承的类称为子类,一个父类, ...
- 《C++ Primer Plus》读书笔记之十一—类继承
第十三章 类继承 1.类继承:扩展和修改类. 2.公有继承格式:冒号指出B类的基类是A,B是派生类. class B :public A { ... }: 3.派生类对象包含基类对象.使用公有派生,基 ...
- Core Java (十一) Java 继承,类,超类和子类
Core Java (十一) Java 继承,类,超类和子类 标签: javaJavaJAVA 2013-01-22 17:08 1274人阅读 评论(0) 收藏 举报 分类: java(58) 读 ...
- Programming In Scala笔记-第十一章、Scala中的类继承关系
本章主要从整体层面了解Scala中的类层级关系. 一.Scala的类层级 在Java中Object类是所有类的最终父类,其他所有类都直接或间接的继承了Object类.在Scala中所有类的最终父类为A ...
- 快学Scala 第十一课 (类继承)
类继承: class People { } class Emp extends People{ } 和Java一样,final的类不能被继承.final的字段和方法不能被override. 在Scal ...
- Java12-java语法基础(十一)继承
Java12-java语法基础(十一)继承 一.继承 学习要求: 1. 理解继承的概念与作用 2. 掌握继承的实现机制 3.理解继承中的覆写与覆盖 4.掌握super关键字的使用 回顾: 1.对客观世 ...
- javascript类继承的一些实验
其实一开始编js没怎么用过对象,一般都用func,func,func···但是用多了,感觉代码一点都不美观,还要这里包一个函数,那里包一个函数,或者一直都是函数调用,不好看,而且一些重用的都要重写的话 ...
- C++ 类继承的对象布局
C++多重继承下,对象布局与编译器,是否为虚拟继承都有很大关系,下面将逐一分析其中的差别,相同点为都按照类继承的先后顺序布局(类内按照虚表.成员声明先后顺序排列).该类情况为子类按照继承顺序排列,如c ...
- C++中public,protected,private派生类继承问题和访问权限问题
C++中public,protected,private派生类继承问题和访问权限问题 当一个子类从父类继承时,父类的所有成员成为子类的成员,此时对父类成员的访问状态由继承时使用的继承限定符决定. 1. ...
- Javascript类继承-机制-代码Demo【原创】
最近看到<Javascript设计模式>,对js模拟的”继承方式“有了更深一步的了解,虽然之前也总是用到prototype.new ,但只是知其然不知所以然,现在将类继承的方法整理如下,暂 ...
随机推荐
- struts2整合spring出现的Unable to instantiate Action异常
在struts2整合spring的时候,完全一步步按照官方文档上去做的,最后发现出现 Unable to instantiate Action,网上一搜发现很多人和我一样的问题,配置什么都没有错误,就 ...
- AnimationDrawable 资源
AnimationDrawable代表一个动画,Android 既支持传统的逐帧动画(类 似于电影方式,一张图片.一张图片地切换),也支持通过平移.变换计算出来的补间动画. 下面以补间动画为例来介绍如 ...
- fmt命令
简单的格式化文本 fmt [option] [file-list] fmt通过将所有非空白行的长度设置为几乎相同,来进行简单的文本格式化 参数 fmt从file-list中读取文件,并将其内容的格式化 ...
- Apache安装完服务没有安装的情况
安装完apache之后(不是按照默认路径安装的,例如是 D:\ )右下方哪个小羽毛图标是没有启动的,左键不好使,而且提示“No services installed”,提示服务器没有被安装.解决方法: ...
- [Java] 类的初始化步骤
前言 类的初始化过程,可在多线程环境下进行的,为了简化,本文介绍的单线程情况下的类初始化步骤. 此外,继承情况下的顺序不是本文焦点,本文重点在于一个类的内部字段的初始化顺序.想了解继承情况下的初始化情 ...
- java集合简介
java集合主要包括以下几点 Java 集合概述 Collection 接口 Iterator 接口 Set List Map Collections 工具类 Enumeration 1.java集合 ...
- 12、ERP设计之 系统基础管理(BS)- 模块与菜单的关联
ShareERP2013-10-03 模块:具有功能设计.权限绑定,链接用户菜单与系统的重要桥梁. 菜单:是用于显示与用户交互的重要入口,更是导航系统的舵手,所以它的设计直接影响到用户体验. 菜单可能 ...
- 【Python排序搜索基本算法】之Prim算法
Prim算法是实现最简单的最小生成树(MST)算法,适合于稠密图.要实现Prim算法,我们主要关注的是增量的变化,也就是从每个非树顶点到树顶点的最短距离,使得最后生成一棵包括所有顶点的树,并且这棵树的 ...
- Js菜鸟学习
(一) 1 代码如下: //页面中写入html内容 document.write("<h1>Hello World!</h1>") 2 代码如下: //为了 ...
- 【Html 学习笔记】第三节——超链接
这一节看看超级链接的应用 普通超链接:<a href=""> <a> 第一个由于环境目前无法尝试,第二个点击后跳转到qq主页. 图片超链接:<imag ...