博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ 继承
阅读量:6307 次
发布时间:2019-06-22

本文共 1909 字,大约阅读时间需要 6 分钟。

转自

 

C++继承

  在C++语言中,一个 可以从一个 派生,也可以从多个基类派生。从一个基类派生的继承称为单继承;从多个基类派生的继承称为 。
 
  派生类的定义格式
 
  单继承的定义格式如下:
 
  class <派生类名>:<继承方式><基类名>
 
  {
 
  <派生类新定义成员>
 
  };
 
  其中,<派生类名>是新定义的一个类的名字,它是从<基类名>中派生的,并且按指定的<继承方式>派生的。<继承方式>常使用如下三种关键字给予表示:
 
  public 表示公有基类;
 
  private 表示私有基类;
 
  protected 表示保护基类;
 
  多继承的定义格式如下:
 
  class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,…
 
  {
 
  <派生类新定义成员>
 
  };
 
  可见,多继承与单继承的区别从定义格式上看,主要是多继承的基类多于一个。
 
  
如果省略继承方式,对'class'将采用,对'struct'将采用公有继承。
 
  
也就是说
 
  
class Base1{};
 
  
struct Base2{};
 
  
class Derive:Base1,Base2{};
 
  
那么,Derive类将私有继承Base1,公有继承Base2。相当于:
 
  
class Derive:private Base1,public Base2{};
 

派生类的三种继承方式

  公有继承(public)、 (private)、保护继承(protected)是常用的三种继承方式。
 
  1. 公有继承(public)
 
  公有继承的特点是 的公有成员和保护成员作为 的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派生类的子类所访问。
 
  2. 私有继承(private)
 
  私有继承的特点是基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类所访问。
 
  3. 保护继承(protected)
 
  保护继承的特点是基类的所有公有成员和保护成员都成为派生类的保护成员,并且只能被它的派生类成员函数或 访问,基类的私有成员仍然是私有的。
 
  下面列出三种不同的继承方式的基类特性和派生类特性。
 
  
  public protected private
公有继承 public protected 不可见
私有继承 private private 不可见
保护继承 protected protected 不可见
 
  为了进一步理解三种不同的继承方式在其成员的可见性方面的区别,下面从三种不同角度进行讨论。

对于公有继承方式

  (1)  成员对其对象的可见性:
 
  公有成员可见,其他不可见。这里保护成员同于私有成员。
 
  (2) 基类成员对 的可见性:
 
  公有成员和保护成员可见,而私有成员不可见。这里保护成员同于公有成员。
 
  (3) 基类成员对派生类对象的可见性:
 
  公有成员可见,其他成员不可见。
 
  所以,在公有继承时,派生类的对象可以访问基类中的公有成员;派生类的成员函数可以访问基类中的公有成员和保护成员。这里,一定要区分清楚派生类的对象和派生类中的成员函数对基类的访问是不同的。

对于私有继承方式

  (1) 基类成员对其对象的可见性:
 
  公有成员可见,其他成员不可见。
 
  (2) 基类成员对派生类的可见性:
 
  公有成员和保护成员是可见的,而私有成员是不可见的。
 
  (3) 基类成员对派生类对象的可见性:
 
  所有成员都是不可见的。
 
  所以,在 时,基类的成员只能由直接 访问,而无法再往下继承。

对于保护继承方式

  这种继承方式与 方式的情况相同。两者的区别仅在于对 的成员而言,对基类成员有不同的可见性。
 
  上述所说的可见性也就是可访问性。关于可访问性还有另的一种说法。这种规则中,称派生类的对象对 访问为水平访问,称派生类的派生类对基类的访问为垂直访问。
 

一般规则

  公有继承时,水平访问和垂直访问对 中的公有成员不受限制;
 
   时,水平访问和垂直访问对基类中的公有成员也不能访问;
 
  保护继承时,对于垂直访问同于公有继承,对于水平访问同于私有继承。
 
  对于基类中的私有成员,只能被基类中的成员函数和 所访问,不能被其他的函数访问。
 
  基类与 的关系
 
  任何一个类都可以派生出一个新类,派生类也可以再派生出新类,因此,基类和派生类是相对而言的。
 
 

转载于:https://www.cnblogs.com/children/archive/2012/09/24/2700205.html

你可能感兴趣的文章
CentOS 7 巨大变动之 firewalld 取代 iptables
查看>>
延时任务和定时任务
查看>>
linux下的权限问题
查看>>
教你如何使用Flutter和原生App混合开发
查看>>
Spring Boot 整合redis
查看>>
CSS hover改变背景图片过渡动画生硬
查看>>
JDBC(三)数据库连接和数据增删改查
查看>>
淘宝应对"双11"的技术架构分析
查看>>
ssh
查看>>
订单的子单表格设置颜色
查看>>
Office365 Exchange Hybrid 番外篇 ADFS后端SQL群集(一)
查看>>
9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路...
查看>>
lvs fullnat部署手册(三)rs内核加载toa篇
查看>>
C++策略模式
查看>>
我的友情链接
查看>>
oracle表分区详解
查看>>
网络编程中常见结构体
查看>>
SSL/TLS原理详解
查看>>
Docker 自定义SSH服务镜像
查看>>
JavaScript强化教程 —— Cocos2d-JS自动JSB绑定规则修改
查看>>