zoukankan      html  css  js  c++  java
  • C++公有、私有、保护继承的关系

    公有继承(public)、私有继承(private)、保护继承(protected)是C++三种继承方式。
    • 公有继承(public)
    公有继承(public)的特点是基类的公有成员(public)和保护成员(protected)作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有(public)的,不能被这个派生类的子类所访问。
    • 私有继承(private)
    私有继承(private)的特点是基类的公有成员(public)和保护成员(protected)都作为派生类的私有成员(private),并且不能被这个派生类的子类所访问,基类的私有成员仍然是私有(public)的。
    • 保护继承(protected)
    保护继承(protected)的特点是基类的所有公有成员(public)和保护成员(protected)都成为派生类的保护成员,并且只能被它的派生类成员函数或友元访问,基类的私有成员仍然是私有(public)的。
     

    公有继承(public)塑模出is-a关系

      适用于基类的每一件事情一定适用于派生类,每一个通过公有继承而来的派生类对象也是一个基类对象。

    私有继承(private)意味着implemented-in-terms-of(根据某物实现出)

      当一个class B private继承 class A 用意是采用class A 已经拥有的某些特性,而不是两个类之间存在任何观念上的关系。

    主要体现在一个子类对象不能转型为父类对象,从父类继承的所有成员都成为子类的私有成员。

    私有继承一般可以用复合来替代。复合可以塑模出has-a或implemented-in-terms-of(根据某物实现出)两种关系。当派生类

    需要访问protected 的基类成员或者重新定义virtual函数,应该用private继承比较合理。

    复合区别去公有继承(is-a),在应用领域体现的是has-a,在实现领域体现的是implemented-in-terms-of(根据某物实现出)。

    例如:一辆车有车轮,发动机,车身等组成,这就是has-a的关系;一个栈我们用两个队列去实现这就是implemented-in-terms-of(根据某物实现出)。

  • 相关阅读:
    [转] Immutable 常用API简介
    [转] 组件库按需加载 借助babel-plugin-import实现
    [转] react-router4 + webpack Code Splitting
    [转] React Hot Loader 3 beta 升级指南
    [转] 如何写好.babelrc?Babel的presets和plugins配置解析
    [转] webpack热更新配置小结
    [转] 学会fetch的用法
    [转] webpack3.0踩坑:postcss-loader的使用
    [转] 详解webpack-dev-server的使用
    webpack 使用环境变量
  • 原文地址:https://www.cnblogs.com/kiplove/p/7415244.html
Copyright © 2011-2022 走看看