C++的继承

摘要

继承是c++语言一个重要的机制,该机制自动地为一个类提供来自另一个类的操作和数据结构,这使得程序员只需在新类中定义已有的类中没有的成分来建立一个新类。

继承解释 

继承性是面向对象程序设计最重要的特征,可以说,不掌握继承就不等于掌握类和对象的精华,所以说继承是C++中很重要的一部分。 

通过继承,我们可以用原来的数据类型来定义一个新的数据类型,定义的新类型既有原来数据中的成员,也能自己添加新的成员 

我们一般把原来的数据类型称为基类或者父类,新的数据类型为派生类,或者子类,在本篇博客中Base为基类,Deriver为派生类;

具体得到了那些成员,这得由两个方面决定: 

- 继承方式 

-基类成员的访问权限 

 

继承的分类

单继承


在继承中箭头所指向的地方是有派生类指向基类;

在继承中继承方式有3中,刚刚上面只写了一个public的共有继承; 

●public 表示公有继承 

●private 表示私有继承 

●protected 表示保护继承

多继承


类C会同时拥有类A和类B的特性(属性和方法,也就是两个类的所有成员)。

 

派生类的构成

派生类的组成一般就两部分,一部分是从基类继承过来的,第二部分是自己特有的; 

所以在单继承中我的示意图Derive比Base的图大点,有存放自己特色的空间; 

主要注意的是多继承中空间的分布:

 

在多继承中靠派生类近的基类属于先声明的,所以数据在派生类中最先被保存; 

所以说,在多继承中,派生类的数据模型和继承顺序有很大关系

 

三种继承方式

我们在前面学类的时候就知道:public,protected,private的访问权限

访问方式

类里面

类外面

public

允许访问

允许访问

protected

允许访问

不允许访问

private

允许访问

不允许访问

这三种访问权限,在继承方式后也有所改变了

  1. public继承中,派生类访问基类的private成员时就会报错;

 

  1. protected继承中在派生类中可以访问基类中的protected成员,但是在main函数中_pub和_pro都不能被访问了;

如果你想要成员能在函数内部被访问,在函数外面不能被访问就用protected继承,可以说protected就是为继承而生的

  1. 在私有继承中,从基类继承下来的东西全部就变为了派生类私有的,所以你在外部完全访问不了,或许有人认为在外部访问不了和protected继承好像没什么区别,你从再次创建一个派生类来访问它的protected成员时是可以访问的,但是private成员就访问不了;

 

总结一下三种继承方式

继承方式

基类的public成员

基类的protected成员

基类的private成员

继承引起的访问控制关系变化概括

public继承

仍为public成员

仍为protected成员

不可见

基类的非私有长远在子类的访问属性不变

protected继承

变为protected成员

变为protected成员

不可见

基类的非私有成员都为子类的保护成员

private继承

变为private成员

变为private成员

不可见

基类中的非私有成员都称为子类的私有成员

在继承中不管是单继承还是多继承,都要注明继承方式,如果不注明在class中默认为private继承,在struct中默认public继承

 

友元函数、静态成员函数的继承

友元函数

在类的学习中,我们都了解了友元,友元可以访问指定类的私有和受保护的自定义成员,如果不是指定的成员,则不能被访问

友元类

(1)友元函数不是类成员函数,所以不能被继承; 

(2) 友元关系是单向的,不具有交换性; 

若B类是A类的友元,不一定A类就是B类的友元 

(3)友元关系不能被传递,若B类是A类的友元,C类是B类的友元,C类不一定是A类的友元 

友元注意事项

a、友元函数可访问类的私有成员,但不是类的成员函数; 

b、友元函数不能用const修饰; 

c、友元函数可以在类定义的任何地方声明,不受类访问限定符限制; 

d、一个函数可以是多个类的友元函数; 

e、友元函数的调用与普通函数的调用和原理相同; 

f、友元关系不能继承,基类的友元对派生类的成员没有特殊的访问权限。如果基类被授予友元关系,则只有基类具有特殊的访问权限。该基类的派生类不能访问授予友元关系的类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值