C++学习笔记之继承与派生(一)

我的理解不一定正确,而且一般也只有初学者看,不希望误人子弟,希望读者自己也加强学习,批评我写的不对的地方

一、继承与派生 两者是同一概念,只不过是不同角度的描述,A继承B,B派生A。继承保持类的原有属性,派生则拓展了属性。(后文出现A是派生类,B是基类)

继承不是基类中的成员在派生类中复制代码这么简单,意思就是B中有private成员name,A中不是相当于也在private中写了个name,而是相当于增加了一个过程,如果你直接写在A中name,定义一个对象相当于直接访问,而继承就是对象->A->B这么一个过程,增加了一个手续。

继承可以理解为一种权限的给予。

继承,吸收除了构造和析构函数之外的全部成员。

二、类的三种成员

类成员的访问控制属性

公有类型成员

  在关键字public后面声明,它们是类与外部的接口,任何外部函数都可以访问公有类型数据和函数。

  对象可以直接访问。

私有类型成员

  在关键字private后面声明,只允许本类中的函数访问,而类外部的任何函数都不能访问。

  对象不能直接访问,如果要访问,需要在类中定义公有函数来操作。

保护类型成员

  与private类似,其差别表现在继承与派生时对派生类的影响不同

 

三、继承方式

无论那种继承,都是所有东西都继承过来,不同的是继承的东西是以什么样的方式继承。

不同继承方式的影响主要体现在:

  • 派生类成员对基类成员的访问权限
  • 通过派生类对象对基类成员的访问权限

公有继承(public):

访问控制熟悉是指派生类对于继承过来的属性能否直接访问,访问权限是指能访问哪些成员

  • 继承的访问控制
    • 基类的public和protected成员:访问属性在派生类中保持不变;(就相当于自己类中有一样)
    • 基类的private成员:不可直接访问(对于派生类中而言),注意是继承了过来,并不是不继承。
  • 访问权限
    • 派生类中的成员函数:可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员;
    • 通过派生类的对象:只能访问从基类继承过来的的public成员。

  派生类的对象对于自己派生出新的成员参考(二),而对于基类的public和protected成员可以直接访问,对于private成员需要派生类定义公有成员函数去调用基类中的公有成员函数,而这个基类中的公有成员函数可以对其私有成员进行操作。

  

私有继承(private) 

  • 继承的访问控制
    • 基类的public和protected成员:都以private身份出现在派生类中;(对于派生类的对象而言)
    • 基类的private成员:不可直接访问。
  • 访问权限
    • 派生类中的成员函数:可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员(需要调用基类中的接口);
    • 派生类中不能直接访问任何private继承过来的任何成员,需要包一层成员函数(回到上一行)。
    • 通过派生类的对象:不能直接访问从基类继承的任何成员。

  所有继承过来的成员都需要自己在派生类中写成员函数来进行操作,如果是基类中的public和protected成员,成员函数能直接访问,但如果是基类private成员,则需要调用基类中的公有成员函数(也就是接口)来操作。

保护继承(protected)

  • 继承的访问控制
    • 基类的public和protected成员:都以protected身份出现在派生类中;
    • 基类的private成员:不可直接访问。
  • 访问权限
    • 派生类中的成员函数:可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员;
    • 通过派生类的对象:不能直接访问从基类继承的任何成员。
  • protected 成员的特点与作用
    • 对建立其所在类对象的模块来说,它与 private 成员的性质相同。
    • 对于其派生类来说,它与 public 成员的性质相同。
    • 既实现了数据隐藏,又方便继承,实现代码重用。
    • 如果派生类有多个基类,也就是多继承时,可以用不同的方式继承每个基类。

 

无论选什么继承方式

共同点:派生类中的成员函数可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员;任何基类的private成员都不能直接访问,都需要基类提供接口。

不同点:public继承,派生类的对象能访问基类的public成员。而其他继承方式派生类的对象不能访直接问任何继承过来的成员。

 

我也不知道访问控制和访问权限的区别或者只是浅显的知道,但是实际编程中我个人认为明白访问权限,并且知道如何操作就行了。

posted @ 2019-12-25 00:50  深海的石头  阅读(232)  评论(0编辑  收藏  举报