C++面向对象的三大特性:继承、多态、封装

继承

子类可以直接使用父类的属性和方法。

优点:

  • 减少代码的重复性\冗余
  • 继承是多态的前提
  • 增加了类的耦合性

缺点:

  • 继承在编译时刻就定义,无法在运行时改变父类继承的实现
  • 父类通常定义了子类的部分方法,父类的改变可能影响子类的行为

TODO
虚继承:解决多重继承中的二义性问题,维护了一张虚基表

多态

C++多态分为运行时多态和编译期多态

  • 静态多态

    • 在编译期就确定
    • 主要通过模板实现,以及函数重载、宏定义,也是实现静态多态的方法
  • 动态多态
    • 通过虚函数实现

      • 即基类中的一些方法被定义为接口,在子类中必须重写和实现这些接口
      • 这样,可以通过调用 基类的指针或者引用,来指向子类对象,从而可以调用子类的对应接口函数实现不同功能
    • 因为是 函数调用机制是 在执行期 才能确定,因此是动态多态

优点:

  • 1 大大提高代码的可重用性
  • 2 提高代码的可维护性以及可扩充性

缺点:

  • 1 可读性不太好,调试起来可能困难
  • 2 模板只能定义在.h文件,当工程大了之后,编译时间很久

封装

隐藏对象的属性和实现细节,仅对外界提供接口和方法

优点:

  • 1 隔离变化
  • 2 便于使用
  • 3 提高复用性
  • 4 提高安全性

缺点:

  • 1 封装太多影响效率
  • 2 使用者难以知道实现细节

cpp面向对象三大特性相关推荐

  1. 【Python学习笔记】面向对象三大特性

    2019独角兽企业重金招聘Python工程师标准>>> ★面向对象:封装.继承和多态是面向对象的三大特点★ 面向对象编程简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元 ...

  2. python 面向对象(三大特性)

    python 面向对象(初级) (思维导图 ↑↑↑↑↑) 概述: 面向过程:根据业务逻辑从上到下垒代码. 函数式:将某功能代码封装至函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类 ...

  3. [.net 面向对象编程基础] (13) 面向对象三大特性——多态

    [.net 面向对象编程基础] (13) 面向对象三大特性--多态 前面两节,我们了解了面向对象的的封装和继承特性,面向对象还有一大特性就是多态.比起前面的封装和继承,多态这个概念不是那么好理解.我们 ...

  4. 【Python面试】 说说Python面向对象三大特性?

    往期面试题: 谈谈对 Python 和其他语言的区别? 说说 Python 解释器种类以及特点? 说说4种常用编码的区别? 废话不多说,开始今天的题目: 问:说说Python面向对象三大特性? 答:P ...

  5. python面向对象三大特性、类的约束、print带颜色输出及super补充

    面向对象三大特性.类的约束.print带颜色输出及super补充 简述: python面向对象的三大特性: 1.继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为 ...

  6. python面向对象三大特性_Python面向对象之多态原理与用法案例分析

    本文实例讲述了Python面向对象之多态原理与用法.分享给大家供大家参考,具体如下: 目标 多态 面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 定义类的准则 继承 ...

  7. Python OOP:面向对象三大特性(封装、继承、多态)、类属性和实例属性、类方法@classmethod、静态方法@staticmethod、函数和类callable、__call__

    一.面向对象三大特性 二.多态 定义:多态是⼀种使⽤对象的⽅式,⼦类重写⽗类⽅法,调⽤不同⼦类对象的相同⽗类⽅法,可以产⽣不同的执⾏结果. 一个父类,可以继承给多个子类,每个不同的子类可以创建多个对象 ...

  8. java 面向对象多态_乐字节Java面向对象三大特性以及Java多态

    ​ 以上就是本次学习的6大任务.我们依次来看. 1 Object类 Object类是所有Java类的根基类. 如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类. cla ...

  9. python面向对象三大特性6大原则_【Python学习笔记】面向对象三大特性

    ★面向对象:封装.继承和多态是面向对象的三大特点★ 面向对象编程简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机程序视为 ...

最新文章

  1. JDK1.6官方下载
  2. 《算法竞赛入门经典》习题3-1 得分(Score,ACM、ICPC Seoul 2005,UVa1585)
  3. C#中析构函数,命名空间及字符串的运用(Ninth day)
  4. 计蒜客 91 地铁 HDU 5263 平衡大师(二分+网络流)
  5. 前端学习(172):格式化文本
  6. 人工智能风险分析技术研究进展
  7. java 异常对象_在java中的异常处理中的异常对象是什么
  8. 查看静态库(.a文件)内容
  9. frameset和iframe的区别
  10. 嵌入式Linux系统编程学习之十五sigaction信号处理机制
  11. Linux常用命令(补充)--其他
  12. 吴恩达|机器学习作业5.0.偏差与方差
  13. lammps教程:单原子应力计算及应力云图绘制方法
  14. STC8PROG - Linux下的 STC8G STC8H 烧录工具
  15. 【Dll调试】DLL调试方法
  16. 群晖7.X关闭双重验证(OTP)的方法
  17. 产品经理们都是怎样成为产品经理的?
  18. 多边形颜色渐变填充C语言,vb6:用渐变填充多边形
  19. Oracle设计简单的图书管理
  20. Linux Nginx安装配置及HTTPS配置

热门文章

  1. SQL server 数据库视频总结
  2. 奇偶校验(附代码实现)
  3. cobbler一键装机流程
  4. 网线如何制作和如何使用?
  5. android开发论坛
  6. 什么是MVC设计模式?
  7. 过滤掉URL中的参数部分
  8. 甘肃地形图之陇右地形分析、DEM数据下载
  9. 浪潮存储与虚拟服务器连接失败,浪潮-异构虚拟化存储研究(示例代码)
  10. 33个高能CSS选择器让我受益匪浅