C++基础之继承类和派生类
(1)继承是创建一个具有某个类的属性和行为的新类的能力。原有的类称为基类,新创建的类称为派生类。派生类将基类中的所有成员作为自己的成员,同时派生类本身可以定义新的成员
(2)派生类只有一个基类的继承称单重继承,简称单继承。派生类具有两个或两个以上的基类的继承称为多重继承,简称多继承。C++语言支持单继承,又支多继承
(3)派生类有3种继承方式:公有继承( public)、私有继承( private)和保护继承( protected)。不同的继承方法中,基类成员在派生类中的访问权限是不同的。3种继承方式中,基类的私有成员在派生类中都是不可见的。公有继承时,基类中公有成员和保护成员在派生类中仍然是公有成员和保护成员;私有继承时,基类中公有成员和保护成员在派生类中都是私有成员;保护继承时,基类中公有成员和保护成员在派生类中都是保护成员。
(4)构造函数不能够继承。因此,派生类的构造函数必须通过调用基类的构造函数来初始化基类的对象。派生类构造函数格式如下
<派生类名>(<派生类构造函数总参数表>):<基类构造函数名>(<参数表1>),…,<子对象名>(<参数表n>)
{
<派生类中数据成员初始化>
}
其中,<派生类名>即为派生类的构造函数名
派生类的构造函数中应包含基类构造函数,子对象类构造函数以及派生类本身构造函数
如果派生类中有默认构造函数,则该默认构造函数将自动包含有基类的默认构造函数
(5)一个特定的类型,当且仅当它至少提供了另一个类型的行为时,则称该类型是另个类型的子类型。这是类型之间的特殊和一般的关系。在公有继承方式下,派生类是基类的子类型,反之不然
6)赋值兼容规则如下
①派生类对象可以赋给基类对象;
②派生类对象可以初始化基类对象的引用;
派生类对象的地址值可赋给指向基类对象的指针。
上述规则的基础是派生类是基类的子类型。
(7)多继承的构造函数的成员初始值表中要包含多个基类的构造函数。对多个基类的构造函数的执行顺序取决于定义多继承时,派生类名后面给定的多个基类名的顺序
(8)多继承通常会在下述两种情况下出现二义性:
①访问不同基类中的相同成员时,可能出现二义性
②访问共同基类中的成员时,可能出现二义性。
避免二义性的方法通常使用成员名限定法。
(9)虚基类是消除公共基类引起二义性的最好方法。说明虚基类的关键字是virtual
其格式如下
class<派生类名>: virtual<继承方式><基类名>
(10)虚基类的间接派生类的构造函数的成员初始值表中要含有公共基类的构造函数,这时虚基类构造函数优先执行,并且仅被执行一次
(11)当对象被删除时,派生类的析构函数被执行,由于析构函数也不能被继承,先执行派生类的析构函数,在执行基类的析构函数,顺序与执行构造函数相反
C++基础之继承类和派生类的更多相关文章
- 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成员)
[源码下载] 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成 ...
- c++ 的类 和 类继承, 什么是c++中的基类和派生类?
闲云潭影日悠悠,物换星移几度秋 你既然已经做出了选择, 又何必去问为什么选择.鬼谷绝学的要义, 从来都不是回答, 而是抉与择 普通类 #ifndef TABTENN0_H_ #define TABTE ...
- C++//菱形继承 //俩个派生类继承同一个基类 //又有某个类同时继承俩个派生类 //成为 菱形继承 或者 钻石 继承//+解决
1 //菱形继承 2 //俩个派生类继承同一个基类 3 //又有某个类同时继承俩个派生类 4 //成为 菱形继承 或者 钻石 继承 5 6 #include <iostream> 7 #i ...
- c++中基类与派生类中隐含的this指针的分析
先不要看结果,看一下你是否真正了解了this指针? #include<iostream> using namespace std; class Parent{ public: int x; ...
- C++学习21 基类和派生类的赋值
在C/C++中,经常会发生数据类型转换,例如整型数据可以赋值给浮点型变量,在赋值之前,先把整型数据转换为浮点型:反过来,浮点型数据也可以赋值给整型变量. 数据类型转换的前提是,编译器知道如何对数据进行 ...
- C++:基类与派生类对象之间的赋值兼容关系
4.5 基类与派生类对象之间的赋值兼容关系 在一定条件下,不同类型的数据之间可以进行类型转换,例如可以将整型数据赋给双精度型变量. 在赋值之前,先把整型数据转换为双精度型数据,然后再把它双精度型变量. ...
- C++:基类和派生类
4.1 派生类的声明 继承实例如下: class Person{ //声明基类Person public: void print() { cout<<"name:"&l ...
- C++基类和派生类之间的转换
本文讲解内容的前提是派生类继承基类的方式是公有继承,关键字public 以下程序为讲解用例. #include<iostream> using namespace std; class A ...
- Java基类和派生类
背景:对基类和派生类有更清晰的认识. 从外部看来,派生类是一个与基类具有相同接口的新类,或许还会有一些额外的的方法和域 .但继承并不仅仅是类的复用.当创建了一个派生类的对象时,该类包含了一个基类的子对 ...
随机推荐
- springmvc接受表单多条数据的值
点击下面链接查看具体内容: http://blog.csdn.net/lutinghuan/article/details/46820023
- css sprite技巧详解
1. [代码][CSS]代码 CSSSprites在国内很多人叫css精灵,是一种网页图片应用处理方式.它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来,当访问该页面时,载入的图片 ...
- vi 常用编辑命令
什么是vi: vi是Linux/Unix底下最常用的文本编辑器,可以理解为和Windows下的txt一样,咱们一般操作linux服务器的时候都是没有图形化界面的, 怎么移动光标,到哪个位置,替换修改什 ...
- PL/SQL学习笔记_03_存储函数与存储过程
ORACLE 提供可以把 PL/SQL 程序存储在数据库中,并可以在任何地方来运行它.这样就叫存储过程或函数. 存储函数:有返回值,创建完成后,通过select function() from dua ...
- COM组件的集合与包容
集合与包容,实质就是组件之间的互相调用.即一个组件使用另一个组件的功能,达到代码复用的作用.只是这种复用是构建在二进制数据上的(因为被复用的组件常常以dll的格式存在),而不是像c++代码复用是以源文 ...
- linux命令学习笔记(11):nl命令
nl命令在linux系统中用来计算文件中行号.nl 可以将输出的文件内容自动的加上行号!其默认的结果与 等等的功能. .命令格式: nl [选项]... [文件]... .命令参数: -b :指定行号 ...
- 【leetcode刷题笔记】Roman to Integer
Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 t ...
- 幻想乡三连A:五颜六色的幻想乡
非常直接地构造 由于答案与生成树计数有关,所以一定要使用矩阵树定理,但这样就不能限制每种颜色的便使用的数量 我们构造$N^2$个关于$Ans_{x,y}$的方程,枚举将红色的边拆成$x$条,将蓝色的边 ...
- AngularJS方法 —— angular.bind
描述: 上下文,函数以及参数动态绑定,返回值为绑定之后的函数. 其中args是可选的动态参数,self在fn中使用this调用. 使用方法: angular.bind(self,fn,args ); ...
- js变量和函数提升的小结
对于变量和函数一起的提升说法,我比较认同"LittleBear"的说法. 比如: <script> console.log(a)//function a(){} var ...