C++封装、继承、多态总结

面向对象的三个基本特征:封装、继承、多态。

封装可以隐藏实现细节,使得代码模块化;
继承可以扩展已存在的代码模块(类);
它们的目的都是为了——代码重用。
而多态则是为了实现另一个目的——接口重用

封装

定义

封装就是将抽象得到的数据和行为相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成类,其中数据和函数都是类的成员,目的在于将对象的使用者和设计者分开,以提高软件的可维护性和可修改性

特性

  1. 将属性和方法结合
  2. 信息隐蔽,将私有属性、私有方法隐藏起来,只留下接口给外界调用
  3. 实现代码重用

继承

定义

继承就是新类从已有类那里得到已有的特性。 类的派生指的是从已有类产生新类的过程。原有的类成为基类或父类,产生的新类称为派生类或子类,子类继承基类后,可以创建子类对象来调用基类函数,变量等

单一继承

继承一个父类,这种继承称为单一继承,一般情况尽量使用单一继承,使用多重继承容易造成混乱易出问题

多重继承

继承多个父类,类与类之间要用逗号隔开,类名之前要有继承权限,假使两个或两个基类都有某变量或函数,在子类中调用时需要加类名限定符如c.a::i = 1;

菱形继承

多重继承掺杂隔代继承1-n-1模式,此时需要用到虚继承,例如 B,C虚拟继承于A,D再多重继承B,C,否则会出错

继承方式和访问权限

继承方式规定了如何访问继承的基类的成员。继承方式指定了派生类成员以及类外对象对于从基类继承来的成员的访问权限

继承也分为接口继承和实现继承:

  • 普通成员函数的接口总是会被继承(子类继承一份接口和一份强制实现)
  • 普通虚函数被子类重写(子类继承一份接口和一份缺省实现)
  • 纯虚函数只能被子类继承接口(子类继承一份接口,没有继承实现)

多态

一个接口多种方法,即用同一个接口,但是效果不同

动态多态

是指在程序运行时才能确定函数和实现的链接,此时才能确定调用哪个函数,父类指针或者引用能够指向子类对象,调用子类的函数,所以在编译时是无法确定调用哪个函数。

使用时在父类中写一个虚函数,在子类中分别重写,用这个父类指针调用这个虚函数,它实际上会调用各自子类重写的虚函数。

虚函数

用virtual关键字修饰的函数;
本质上由虚指针和虚表控制,虚指针指向虚表中的某个函数入口地址,就实现了多态

纯虚函数

含有至少一个纯虚函数的类叫抽象类,因为抽象类含有纯虚函数,所以其虚表是不健全的,在虚表不健全的情况下是不能实例化对象的,子类继承抽象基类后必须重写基类的所有纯虚函数。
否则子类仍为纯虚函数子类将抽象基类的纯虚函数全部重写后会将虚表完善,此时子类才能实例化对象,纯虚函数只声明不定义,形如 virtual void print() = 0

静态多态

是在编译期就把函数链接起来,此时即可确定调用哪个函数或模板,静态多态是由模板和重载实现的,在宏多态中,是通过定义变量,编译时直接把变量替换,实现宏多态

优点: 带来了泛型编程的概念,使得C++拥有泛型编程与STL这样的武器; 在编译期完成多态,提高运行期效率; 具有很强的适配性和松耦合性,(耦合性指的是两个功能模块之间的依赖关系)

缺点: 程序可读性降低,代码调试带来困难;无法实现模板的分离编译,当工程很大时,编译时间不可小觑 ;无法处理异质对象集合

C++的封装、继承、多态相关推荐

  1. Java继承_Hachi君浅聊Java三大特性之 封装 继承 多态

    Hello,大家好~我是你们的Hachi君,一个来自某学院的资深java小白.最近利用暑假的时间,修得满腔java语言学习心得.今天小宇宙终于要爆发了,决定在知乎上来一场根本停不下来的Hachi君个人 ...

  2. python多态的三种表现形式_python小结----面向对象的三大特征(封装,继承,多态)

    面向对象的三大特征: 封装,继承,多态 面向对象的编程思想核心:高类聚,低耦合–程序的设计模式范畴 封装 什么是封装: 在面向对象编程的思想中,对代码进行高度封装,封装又叫包装 封装就是指将数据或者函 ...

  3. python 参数类型的多态_【Python】面向对象:类与对象\封装\继承\多态

    六.Python面向对象--类与对象\封装\继承\多态 1.什么是面向对象编程 1.1 程序设计的范式:程序可控,易于理解 1.2 抽象并建立对象模型 1.3 程序是不同对象相互调用的逻辑.每个对象在 ...

  4. python--编写程序:实现乐手弹奏乐器,乐手可以弹奏不同的乐器而发出不同的声音------使用类的封装继承多态的问题/使用面向对象的思想,设计自定义类,描述出租车和家用轿车的信息

    编写程序:实现乐手弹奏乐器,乐手可以弹奏不同的乐器而发出不同的声音 ------使用类的封装继承多态的问题 class Instrumnet():#乐器类def make_sound(self):pa ...

  5. c语言编程 菲薄拉,C语言设计模式-封装-继承-多态

    快过年了,手头的工作慢慢也就少了,所以,研究技术的时间就多了很多时间,前些天在CSDN一博客看到有大牛在讨论C的设计模式,正好看到了,我也有兴趣转发,修改,研究一下. 记得读大学的时候,老师就告诉我们 ...

  6. 大数据笔记8—java基础篇4(面向对象-封装-继承-多态)

    面向对象 一.面向对象 1.面向过程 1.2.举例 1.3.总结 二.面向对象 1.简述 2.举例 3.思想特点 2.1.类的定义格式 2.1.1.简述 2.2.2.格式 2.3.3.示例 三.类的使 ...

  7. 小白理解——封装继承多态

                                      一.封装 是什么:首先是抽象,把事物抽象成一个类,其次才是封装.对外表示为一个对象,隐藏对象的属性和动作实现的细节,仅对外公开接口. ...

  8. Day55-每日一道Java面试题-Java 面向对象编程三大特性: 封装 继承 多态

    Java 面向对象编程三大特性: 封装 继承 多态 封装 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问.但是如果一个类没有 ...

  9. 面向对象 编程及面向对象三大属性:封装 继承 多态

    面向对象 面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构.应用平台.分布式系统.网络管理结构. ...

  10. 白话文带你了解 封装 继承 多态

    这里讲的仅仅是带你理解 封装 继承 多态 染好您可以移步去别的文章学习具体的实现 (只是个人理解 您可以不爱,请别伤害哦!) 首先你要知道 java是面向对象的,说白了就是我拿你当个人,请认清你的地位 ...

最新文章

  1. usaco letter game
  2. 从C语言的角度重构数据结构系列(四)-静态链表动态链表
  3. C++ 流体效果的实现
  4. Map的两种遍历方法
  5. Collection中list集合的应用常见的方法
  6. python自动控制库_Python最为神奇的库,可控制你的鼠标键盘自动运行!
  7. java 装配_Spring 通过Java代码装配bean
  8. informatica中元数据管理
  9. 中国移动订330万台Redmi K40系列 网友:怪不得抢不到
  10. yum安装ruby_rediscluster安装
  11. pytorch nn.CrossEntropyLoss
  12. 【转】tensorflow中的batch_norm以及tf.control_dependencies和tf.GraphKeys.UPDATE_OPS的探究
  13. 4412 学习目录总结
  14. javaweb文件压缩下载
  15. 【svn】SSL error: A TLS warning alert has been received的解决方法
  16. Selenium官网首页译
  17. java pojo类
  18. 遭遇XP-664129A8.EXE
  19. 【转】Mac 下钥匙串不能授权访问怎么解决--不错
  20. 与日历有关的小程序推荐

热门文章

  1. 分离TWS耳机充电盒方案推荐
  2. 三千臭皮匠:集体能否产生智慧?
  3. vivos12参数配置
  4. 以赛促练-力扣第303场周赛反思
  5. C++练手项目(基于muduo网络库+mysql+jsoncpp的简易HTTPWebServer用于网页显示数据库后台数据
  6. 将文件固定到任务栏右边(还在为找不到文件烦恼的请进)
  7. 莫奈克系统服务器,默纳克主机自学习(简版)
  8. 算法训练营学习笔记1
  9. Onsen UI 前端框架(二)
  10. Onsen UI 学习笔记之二:路由