c++——派生类和基类转换(类型兼容性原则)
基类也叫父类,派生类也叫子类。
类之间的继承关系
继承关系是类之间的父子关系。 继承关系的特点如下:
A、 子类拥有父类的所有属性和行为
B、 子类也是一种特殊的父类
C、 子类对象可以当父类对象使用
D、 子类中可以添加父类没有的属性和方法
E、 子类对象可以直接初始化父类对象
F、 子类对象可以直接赋值给父类对象
G、 继承是面向对象编程中代码复用的重要手段
H、父类指针可以直接指向子类对象
I、父类引用可以直接引用子类对象
在 C++编程中, 软件可重用性(software reusability)是通过继承(inheritance)机
制来实现的。 类的继承, 是新的类从已有类得到已有的特性。 从已有类产生新类
的过程就是类的派生。原有的类称为基类或父类, 产生的新类称为派生类或子类。
继承是一种封装模型之间关系的抽象, 是不同封装模型的层次分类。
如果一个派生类同时有多个基类, 称为多重继承; 如果派生类只有一个基类,称为单继承。
使用 class 关键字定义派生类时, 默认继承方式为 private。
使用 struct 关键字定义派生类时, 默认继承方式为 public。
C++工程项目中, 通常只使用 public 继承方式。
派生类中的成员包含两大部分, 一类是从基类继承过来的, 一类是自己增加
的成员。 从基类继承的成员表现其共性, 而新增的成员体现其个性。
派生类中由基类继承而来的成员的初始化工作还是由基类的构造函数完成,
然后派生类中新增的成员在派生类的构造函数中初始化。 派生类没有继承基类的
构造函数和析构函数。
派生类经常(但不总是)覆盖它继承的虚函数。如果派生类没有覆盖其基类中的某个虚函数,则该虚函数的行为类似于其他的普通成员,派生类会直接继承其在基类中的版本。
c++11允许派生类显式地注明它使用某个成员函数覆盖了它继承的虚函数。具体做法是在形参列表后面、或者在const成员函数的const关键字后面、或者在引用成员函数的引用限定符后面添加一个关键字override。
派生类也必须使用基类的构造函数来初始化它的基类部分。(除非基类没有显式定义构造函数,这样在派生类的构造函数中可以不显式调用基类的构造函数)
我们可以把公共派生类当做基类使用,派生类可以赋值给基类,基类的引用或者指针可以绑定到派生类上(反之不行)。
遵循基类的接口:
尽管在语法上来说我们可以在派生类构造函数体内给它的共有或者受保护的基类成员赋值,但是最好不要这么做。和使用基类的其他场合一样,派生类应该遵循基类的接口,并通过调用基类的构造函数来初始化那些从基类中继承而来的成员。
如果基类定义了一个静态成员,则在整个继承体系中只存在该成员的唯一定义。不论基类中派生出来多少个派生类,对于每个静态成员都只存在唯一的实例。静态成员也要遵循通用的访问控制规则,public,private,protected。
如果我们想要将某个类用作基类,则该类必须是已经定义了的而不能仅仅声明。这意味着,一个类不能派生它本身。
有时候我们会定义这样一种类,我们不希望其他类继承它,或者不想考虑它是否适合作为一个基类,为了实现这一目的,c++11提供了一种防止继承发生的方法,即在类名后跟一个关键字final。我们还能把某个函数指定为final,则之后任何尝试覆盖该函数的操作都将引发错误。
eg:
class A final { ....};//A不能作为基类
当我们用一个派生类对象为一个基类对象初始化或者赋值时,只有该派生类对象中的基类部分会被拷贝、移动或赋值,它的派生部分会被忽略掉。
如果表达式既不是指针也不是引用,那么它的动态类型永远与静态类型一致,如果是指针或者引用,将产生动态绑定,动态类型直到运行时才可知,而静态类型在编译时就总是已知的。
c++——派生类和基类转换(类型兼容性原则)的更多相关文章
- c++ 派生类向基类转换的可访问性
对于c++面向对象一直很疑惑,这次决定下功夫把它弄明白 一.派生类和基类之间的类型转换 首先理解,派生类含有基类的所有成分,只不过有些就算在派生类的成员函数也不能访问而已. (1)派生类和基类的自动转 ...
- 从零开始学C++之继承(二):继承与构造函数、派生类到基类的转换
一.不能自动继承的成员函数 构造函数 析构函数 =运算符 二.继承与构造函数 基类的构造函数不被继承,派生类中需要声明自己的构造函数. 声明构造函数时,只需要对本类中新增成员进行初始化,对继承来的基类 ...
- C++ 派生类到基类转换的可访问性
今天看c++ primer关于派生类到基类转换的可访问性,看的很晕,看了下面的文章恍然大悟: http://www.2cto.com/kf/201403/283389.html C++ primer第 ...
- c++ primer 学习杂记2【派生类到基类转换的可访问性】
参考: http://blog.csdn.net/rehongchen/article/details/7930853 http://blog.csdn.net/ming_road/article/d ...
- C++_派生类的构造函数及派生类和基类之间的特殊关系
派生类和基类的概念及派生类构造函数的原理: 创建一个叫做TableTennisPlayer的基类,记录会员的名字和是否有球桌. //声明一个基类 class TableTennisPlayer { p ...
- C#中派生类调用基类构造函数用法分析
这里的默认构造函数是指在没有编写构造函数的情况下系统默认的无参构造函数 1.当基类中没有自己编写构造函数时,派生类默认的调用基类的默认构造函数例如: ? 1 2 3 4 5 6 7 8 9 10 11 ...
- 转 关于C#中派生类调用基类构造函数的理解
关于C#中派生类调用基类构造函数的理解 .c#class 本文中的默认构造函数是指在没有编写构造函数的情况下系统默认的无参构造函数 1. 当基类中没有自己编写构造函数时,派生类默认的调用 ...
- c++中派生类对基类成员的三种访问规则(转)
C++中派生类对基类成员的访问形式主要有以下两种:1.内部访问:由派生类中新增成员对基类继承来的成员的访问.2.对象访问:在派生类外部,通过派生类的对象对从基类继承来的成员的访问.今天给大家介绍在3中 ...
- C# 派生和继承(派生类与基类)
using System; using System.Collections.Generic; using System.Text; namespace 继承 { class Program { st ...
随机推荐
- Asp.net Mvc (Filter及其执行顺序)
应用于Action的Filter 在Asp.netMvc中当你有以下及类似以下需求时你可以使用Filter功能判断登录与否或用户权限,决策输出缓存,防盗链,防蜘蛛,本地化设置,实现动态Actionfi ...
- 函数式编程工具:filter和reduce
# -*- coding: utf-8 -*- #python 27 #xiaodeng #函数式编程工具:filter和reduce #python内置函数中,map函数是用来进行函数式编程这类工具 ...
- linux命令中的 < 和 |、>符号作用就解释
输出重定向比如输入一条命令,默认行为是将结果输出到屏幕.但有时候我们需要将输出的结果保存到文件,就可以用重定向.ps > ps.txt < 表示的是输入重定向的意思,就是把<后面跟的 ...
- CYDIA装了个插件,想删除怎么都删除,电脑如何删除插件?
http://bbs.weiphone.com/read-htm-tid-3670917.html 装了个插件,想删除怎么都删除不掉不要跟我说在CYDIA里面删除.,在CYDIA里点击该插件就会闪退C ...
- service zabbix does not support chkconfig
#chkconfig --add zabbix service zabbix does not support chkconfig 解决方法#vi /etc/init.d/myservice#!/bi ...
- 步入DevExpress的使用(VS)
1.下载安装DevExpress控件(如DXperienceUniversal-11.1.12.exe),安装后路径:“C:\Program Files (x86)\DevExpress 2011.1 ...
- OAF_OAF控件系列3 - Poplist的实现(案例)
2014-06-02 Created By BaoXinjian
- Android仿联系人列表分组悬浮列表实现,自己定义PinnedHeaderListView实现
效果 (关于gif怎么生成的.我先录手机的屏幕得到mp4文件.然后用这个网址:https://cloudconvert.com/mp4-to-gif 进行的mp4转换gif,使用的时候须要又一次选择g ...
- 代码解说Android Scroller、VelocityTracker
在编写自己定义滑动控件时经常会用到Android触摸机制和Scroller及VelocityTracker.Android Touch系统简单介绍(二):实例具体解释onInterceptTouchE ...
- Latex 附录生成方法-附使用的一些tips
Latex 附录生成方法-附使用的一些tips 工具 使用latex写论文时,国内科研人员使用比较多的前端工具当属CTex,另外的前度工具有texstdio,texworks,sublime,甚至vi ...