继承与派生

第五章 类的继承派生之——类的继承派生 1、通过已有的类来建立新类的过程,叫做“类的派生”,原来的类叫做“基类”,新建立的类则叫做“派生类”。 从类的成员角度看,派生类自动地将基类的所有成员作为自己的成员,这叫做“继承”。 基类派生类又可以分别叫做“父类”“子类”,有时也称为“一般类”“特殊类”。 从一个或多个以前定义的类 (基类) 产生新类的过程称为派生这个新类称为派生类。 派生的新类同时也可以增加或者重新定义数据操作,这就产生了类的层次性。 类的继承是指派生继承基类的数据成员成员函数。 继承常用来表示类属关系,不能将继承理解为构成 阅读详情

类之间的关系:
has-A:
包含关系,用以描述一个类由多个“部件类”构成。实现has-A关系用类成员表示,即一个类中的数据成员是另一种已经定义的类.
use-A
一个类部分地使用另一个类。通过类之间成员函数的相互联系,定义友员或对象参数传递实现。
is-A
机制称为“继承”。关系具有传递性,不具有对称性。

继承的关系:
继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承类似,例如儿子继承父亲的财产。

继承(Inheritance)可以理解为一个类从另一个类获取成员变量和成员函数的过程。例如类 B 继承于类 A,那么 B 就拥有 A 的成员变量和成员函数。被继承的类称为父类或基类,继承的类称为子类或派生类。

继承概念:
继承:
继承是使用已经编写好的类来创建新类,新的类具有原有类的所有属性和操作,也可以在原有类的基础上做一些修改,
新类称为派生类或者子类原有类称为基类或者父类,
派生类是基类的具体化。
继承的一些性质:
1、子类拥有父类的所有成员变量和成员函数
2、子类可以拥有父类没有的方法和属性
3、子类就是一种特殊的父类
4、子类对象可以当作父类对象使用

单个类的访问控制:
public 修饰的成员变量 方法 在类的内部 类的外部都能使用
protected: 修饰的成员变量方法,在类的内部使用 ,在继承的子类中可用 ;其他 类的外部不能被使用
private: 修饰的成员变量方法 只能在类的内部使用 不能在类的外部

继承权限:

1) public继承方式
基类中所有 public 成员在派生类中为 public 属性;
基类中所有 protected 成员在派生类中为 protected 属性;
基类中所有 private 成员在派生类中不能使用。

2) protected继承方式
基类中的所有 public 成员在派生类中为 protected 属性;
基类中的所有 protected 成员在派生类中为 protected 属性;
基类中的所有 private 成员在派生类中不能使用。

3) private继承方式
基类中的所有 public 成员在派生类中均为 private 属性;
基类中的所有 protected 成员在派生类中均为 private 属性;
基类中的所有 private 成员在派生类中不能使用。

通过上面的分析可以发现:
1) 基类成员在派生类中的访问权限不得高于继承方式中指定的权限。例如,当继承方式为 protected 时,那么基类成员在派生类中的访问权限最高也为 protected,高于 protected 的会降级为 protected,但低于 protected 不会升级。再如,当继承方式为 public 时,那么基类成员在派生类中的访问权限将保持不变

类型兼容性原则
类型兼容规则是指在需要基类对象的任何地方,都可以使用公有派生类的对象来替代。通过公有继承,派生类得到了基类中除构造函数、析构函数之外的所有成员。这样,公有派生类实际就具备了基类的所有功能,凡是基类能解决的问题,公有派生类都可以解决。类型兼容规则中所指的替代包括以下情况:
子类对象可以当作父类对象使用
子类对象可以直接赋值给父类对象
子类对象可以直接初始化父类对象
父类指针可以直接指向子类对象
父类引用可以直接引用子类对象
在替代之后,派生类对象就可以作为基类的对象使用,但是只能使用从基类继承的成员。
类型兼容规则是多态性的重要基础之一。

继承时构造析构调用的规则;
1、子类对象在创建时会首先调用父类的构造函数
2、父类构造函数执行结束后,执行子类的构造函数
3、当父类的构造函数有参数时,需要在子类的初始化列表中显示调用
4、析构函数调用的先后顺序与构造函数相反

继承与组合混搭情况下,构造和析构调用原则:
原则: 先构造父类,再构造成员变量、最后构造自己
先析构自己,在析构成员变量、最后析构父类
//先构造的对象,后释放

继承中的同名成员变量的处理方法
重载:必须在同一个类中进行
子类无法重载父类的函数,父类同名函数将被名称覆盖
重载是在编译期间根据参数类型和个数决定函数调用
重定义:必须发生于父类与子类之间
并且父类与子类中的函数必须有完全相同的原型(如果用virtual关键字修饰,那叫重写)
派生类中的static的关键字:
继承和static关键字在一起会产生什么现象哪?
理论知识
基类定义的静态成员,将被所有派生类共享
根据静态成员自身的访问特性和派生类的继承方式,在类层次体系中具有不同的访问性质 (遵守派生类的访问控制)
派生类中访问静态成员,用以下形式显式说明:
类名 :: 成员

1> static函数也遵守3个访问原则
2> static易犯错误(不但要初始化,更重要的显示的告诉编译器分配内存)

多继承:
概念: 一个类有多个直接基类的继承关系称为多继承
多继承声明语法
class 派生类名 : 访问控制 基类名1 , 访问控制 基类名2 , … , 访问控制 基类名n
{
数据成员和成员函数声明
};
类 C 可以根据访问控制同时继承类 A 和类 B 的成员,并添加
自己的成员
多继承的派生类的构造和访问:
多个基类的派生类构造函数可以用初始式调用基类构造函数初始化数据成员
执行顺序与单继承构造函数情况类似。多个直接基类构造函数执行顺序取决于定义派生类时指定的各个继承基类的顺序。
一个派生类对象拥有多个直接或间接基类的成员。不同名成员访问不会出现二义性。如果不同的基类有同名成员,派生类对象访问时应该加以识别。

虚继承
如果一个派生类从多个基类派生,而这些基类又有一个共同的基类,则在对该基类中声明的名字进行访问时,可能产生二义性
如果在多条继承路径上有一个公共的基类,那么在继承路径的某处汇合点,这个公共基类就会在派生类的对象中产生多个基类子对象
要使这个公共基类在派生类中只产生一个子对象,必须对这个基类声明为虚继承,使这个基类成为虚基类。
虚继承声明使用关键字 virtual

C++继承派生 C++通过类派生(classderivation)的机制来支持继承。被继承的类称为基类或超类(superclass),新产生的类为派生类(derivedclass)或子类(subclass)。基类派生类的集合称作类继承层次结构(hierarchy)。class派生类名访问限定符基类名{private成员表1;//派生类增加或替代的私有成员public成员表2;//派生类增加或替代的公有成员protected成员表3;private。... 阅读详情

相关推荐

C++继承派生详解

C++继承派生详解

weixin_42831406的博客 1102

C++——继承

继承:龙生龙,凤生凤,老鼠儿子会打洞。 sizeof可以验证继承基类中的所有成员变量 public继承方式,结合子类对象对基类成员函数的调用,可以得到子类对基类成员函数继承(所有资源都被继承基类public成员在子类中权限也是public。) #include<iostream> using namespace std; class Base { //父类 pu...

陌上人如玉,公子世无双。 914

C++13.2 类的继承

公有继承 & 私有继承 & 保护继承 公有继承public):当一个类派生自公有基类时,基类的公有成员也是派生类的公有成员基类的保护成员也是派生类的保护成员基类的私有成员不能直接被派生类访问,但是可以通过调用基类的公有保护成员来访问。 保护继承(protected): 当一个类派生自保护基类时,基类的公有保护成员将成为派生类的保护成员。 私有继承(private):当一个类派生自私有基类时,基类的公有保护成员将成为派生类的私有成员。 静态类型&动态类型 ...

m0_47096428的博客 972

C++中public、protected及private继承

转载这里 在设计基类时,对于某些成员变量基类设计者A也不知道其他人会怎么使用,假如A一开始将成员变量a定义为private,当其他人过来继承时需要一个a++的操作,那么他就不得不去找A让他改基类的定义,不然在继承类中无法直接操作基类的私有成员。过了一会儿又有人需要一个a--操作,那么A又要改基类定义添加一个a--的public成员函数,当然后面还有各种需求。。所以A很无奈,于是就出现了protect,对于继承者而言,你们随便操作不用再来麻烦我。这样即保证了数据的私有性(不能被对象获取),同时基类设计者..

mystyle_的博客 1474

c++的声明函数是哪_基础篇:继承,多态虚函数

小小将:C++虚函数​zhuanlan.zhihu.comLWenlong:C++ 多态虚函数​zhuanlan.zhihu.comC++ 继承、多态、虚函数 - 掘金​juejin.im目录:继承多态性虚函数纯虚函数抽象类以下个人总结,如有侵权,请联系删除,如有错误,欢迎大家指正,谢谢!继承所谓继承,是指在一个已存在类的基础上建立一个新类。已存在的类称为基类(base class)或父类,新...

weixin_39716510的博客 210

基类中的成员都可以被其派生继承_C++基础知识 完结篇-继承-多态

整理码字不易,养成好习惯,点赞关注,你的支持就是我写下去的动力,谢谢老板。本文为C++第三篇后续接着这篇文章写,大家可以持续关注,前四篇在主页4.7 继承派生4.7.1 继承概述4.7.1.1 为什么需要继承​网页类class IndexPage{public://网页头部void Header(){cout << "网页头部!" << endl;}//网页左侧菜单voi...

weixin_34707242的博客 1779

类的继承方式

1、公有继承 当类的继承方式为公有继承时,基类的公有保护成员的访问属性在派生类中不变,而基类的私有成员不可访问。即基类的公有成员保护成员继承派生类中仍作为派生类的公有成员保护成员派生类的其他成员可以直接访问它们。无论派生类的成员还是派生类的对象都无法访问基类的私有成员。 2、私有继承 当类的继承方式为私有继承时,基类中的公有成员保护成员都以私有成员身份出现在派生类中,而基类的私有...

Steve_Kung的博客 1420

C++:继承派生

继承派生的概念 基类派生类 访问权限控制 派生类的构造函数、析构函数 构造函数析构函数 duo'ji'c

qq_53826699的博客 8498

类的继承派生

类及对象的访问权限: 类中的成员函数可以直接访问类中的数据成员(包括私有成员、公有成员、保护成员); 类中的成员函数可以相互访问; 类的对象只能访问类的公有成员,不能访问私有成员及保护成员。 一、继承派生 在C++中,类具有继承性,所谓继承就是在一个已存在的类的基础上建立一个新的类。 利用类的继承,可以将原来的程序代码重复使用,从而减少了程序代码的冗余度,符合软件重用的目标。增强编程语言的功能。提高软件开发效率。 在继承关系中,被继承的类称为基类(或父类),把通过继承关......

swint_er的博客 9540

C++核心编程——继承派生

在main函数中定义对象stud1时指定了5个实参。它们按顺序传递给派生类构造函数Student1的形参(n,nam,s,a,add)。然后,派生类构造函数将前面3个(n,nam,s)

weixin_46216674的博客 1232

C++类的继承派生

本篇文章主要介绍了类的继承派生

qq_51024622的博客 1584

C++基础学习第九课(C++继承)

第九课 1,类的继承 ·继承可以使得子类具有父类的属性仿佛或者重新定义、追加属性方法; 2,继承相关概念 ·继承是类之间定义的一种重要关系; ·一个B类继承A类,或者说从A类派生B类; ·那么A类称为基类,B类称为派生类(子类); 如图: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WNmI1gaM-1614928508549)(C:\Users\daili\AppData\Roaming\Typora\typora-user-images\image-20210305

kdnnnd的博客 279

C++学习:继承中的派生

文章目录继承概述派生类定义派生类中的构造函数派生类实现时注意事项protected限定符重定义成员函数访问重定义的基函数继承细节不继承函数派生类中的拷贝构造函数赋值操作符派生类中的析构函数 继承概述 面对对象编程(OOP)是一种强大编程方式,提供了“继承”这种抽象的方式,这意味者,可以先定义并编译常规形式的类,再定义那个类的具体版本,并继承前一个类的所有功能。 继承就是基于一个类(称为基类)创建新类(派生类)的过程。例如类B从类A继承而来,也可以说A是父类,B是子类。 举一个例子来说,先定义一个基类Emp

qq_52909835的博客 578
上一篇: 字符串的重载程序
下一篇: 多态
mf1crystal
博客等级 码龄9年 5粉丝 40原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值