1、向对象程序设计的核心思想是数据抽象、继承和动态绑定。通过使用数据抽象可以将类的接口与实现分离;使用继承,可以定义相似的类型并对其相似的关系建模;使用动态绑定,可以在一定程度上忽略相似类型的区别,而以统一的方式使用它们的对象,动态绑定也叫作运行时绑定,当用基类的引用或者指针调用一个虚函数时,将发生动态绑定。
 
2、重要概念:基类/派生类、虚函数、继承、覆盖(重写)、静态类型/动态类型、类型转换
 
3、基类:层次关系的根部的类。派生类:通过继承得到的类。
 
3、虚函数的概念:对于某些函数,基类希望它的派生类各自定义适合自身的版本,此时基类就将这些函数声明成虚函数。
 
4、虚函数的几个规则:任何构造函数之外的非静态函数都可以是虚函数;关键字virtual只能出现在类内部的声明语句之前而不能用于类外部的函数定义;如果基类把一个函数声明成虚函数,则该函数在派生类中隐式地也是虚函数。
 
5、覆盖(重写):override,派生类中对基类中的虚函数根据自身的要求进行实现,就实现了对基类中相应函数的覆盖,在形参列表后面增加一个override关键字。
 
6、静态类型:变量声明时的类型或者表达式生成的类型,在编译的时候就已知了,可以理解为变量或表达式“字面意思”上的类型;
     动态类型:变量或者表达式表示的内存中对象的类型,直到运行时才可知,可以理解为变量或表达式“实际使用”的类型。
     在这里就牵扯到一个动态类型和静态类型一致的问题:如果表达式既不是引用也不是指针,则两者永远一致。我的理解是引用和指针的类型是根据实际对象来决定的,例如在形参列表中有一个是基类的引用——father &,而实参是派生类——child,那么引用就会转变成child &,那么静态类型(father &)就和动态类型(child &)不一致了。
 
7、类型转换:派生类中包含了基类中的成员,所以可以实现派生类到基类的转换,反之则不行。
 
8、当时用容器存放继承体系中的对象时,不要存储对象,而是存储对象的(智能)指针,这样就可以使用动态绑定。

[C++]面向对象的程序设计——重要概念的更多相关文章

  1. 【Python3之面向对象的程序设计】

    一.面向对象的程序设计的由来 1.第一阶段:面向机器,1940年以前 最早的程序设计都是采用机器语言来编写的,直接使用二进制码来表示机器能够识别和执行的指令和数据. 简单来说,就是直接编写 0 和 1 ...

  2. Python进阶---面向对象的程序设计思想

    Python的面向对象 一.面向过程与面向对象的对比 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...

  3. python 面向对象的程序设计

    一:什么是编程范式? 编程是程序员用特定的语法 + 数据结构 + 算法组成的代码来告诉计算机如何执行任务的过程. 如果把编程的过程比喻为练习武功,那么编程范式指的就是武林中的各种流派,而在编程的世界里 ...

  4. python学习------面向对象的程序设计

    一 面向对象的程序设计的由来 1940年以前:面向机器 最早的程序设计都是采用机器语言来编写的,直接使用二进制码来表示机器能够识别和执行的指令和数 据.简单来说,就是直接编写 和 的序列来代表程序语言 ...

  5. Python之路【第八篇】:面向对象的程序设计

    阅读目录 一 面向对象的程序设计的由来二 什么是面向对象的程序设计及为什么要有它三 类和对象3.1 什么是对象,什么是类3.2 类相关知识3.3 对象相关知识3.4 对象之间的交互3.5 类名称空间与 ...

  6. python之旅:面向对象的程序设计

    一 面向对象的程序设计的由来 面向对象设计的由来见概述:http://www.cnblogs.com/moyand/p/8784210.html 二 什么是面向对象的程序设计及为什么要有它 面向过程的 ...

  7. python基础----面向对象的程序设计(五个阶段、对小白的忠告、关于OOP常用术语)、类、对象

    一.面向对象的软件开发有如下几个阶段                                              1.面向对象分析(object oriented analysis ,O ...

  8. 8、泛型程序设计与c++标准模板库1、泛型程序设计的概念和术语

    有效地利用已有的成果,将经典的.优秀的算法标准化.模块化,从而提高软件的生产率,是软件产业化的需求,为了实现这一需求,不仅需要面向对象设计思想,而且需要泛型程序设计思想. c++语言提供的标准模板库( ...

  9. JavaScript高级程序设计学习笔记--面向对象的程序设计(二)-- 继承

    相关文章: 面向对象的程序设计(一) — 创建对象 http://www.cnblogs.com/blackwood/archive/2013/04/24/3039523.html 继承 继承是OO语 ...

随机推荐

  1. 纯数据结构Java实现(4/11)(BST)

    个人感觉,BST(二叉查找树)应该是众多常见树的爸爸,而不是弟弟,尽管相比较而言,它比较简单. 二叉树基础 理论定义,代码定义,满,完全等定义 不同于线性结构,树结构用于存储的话,通常操作效率更高.就 ...

  2. docker安装Ubuntu以及ssh连接

    一.简述 环境: Windows10 docker:2.1.0.1 二.开始安装 Windows的docker安装就不再多说了,网上有很多教程 在docker的hub仓库中,有专门的ubuntu系统. ...

  3. tensorflow中的batch_norm以及tf.control_dependencies和tf.GraphKeys.UPDATE_OPS的探究

    https://blog.csdn.net/huitailangyz/article/details/85015611#

  4. unity之游戏特效

    一.运动轨迹 运动轨迹常常用于表现武器的挥舞效果,在提高速度感的同时又能让玩家看清楚招式动作,所以是常见的一种格斗特效. Unity中可以直接使用TrailRender来实现该效果. 二.运动模糊 运 ...

  5. 18_init 函数的使用

    1.init()函数是一个内置函数,在程序执行前会先执行init()函数,及在main()函数执行前执行 2.如果调用包里有init()函数,会先执行调用包的init()函数,在这执行本函数的init ...

  6. Socket(套接字)在服务器端和客户端之间的基本工作原理

    Socket之间的连接过程主要可以概括为以下三步: 服务器建立监听:客户端初始化Socket动态库后创建套接字,然后指定客户端Socket的地址,循环绑定Socket直至成功,然后开始建立监听,此时客 ...

  7. 欧几里得(Euclid)与拓展的欧几里得算法

    欧几里得(Euclid)与拓展的欧几里得算法 欧几里得(Euclid)与拓展的欧几里得算法 欧几里得算法 原理 实现 拓展的欧几里得算法 原理 递归求解 迭代求解 欧几里得算法 原理 欧几里得算法是一 ...

  8. Good Inflation SPOJ - GOODG 李超树

    题目传送门 题意:刚开始有一个气球体积为空,现在有n个充气点,从1->n遍历这n充气点,每个充气点有vi,di,vi为走到这个充气点之后可以为气球充气vi的体积,di为选择了在这个点充气的时候, ...

  9. hdu 1540 Tunnel Warfare(线段树)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1540 题意:D代表破坏村庄,R代表修复最后被破坏的那个村庄,Q代表询问包括x在内的最大连续区间是多少. ...

  10. 什么是WSGI

    WSGI全称为Python Web Server Gateway Interface,Python Web服务器网关接口,它是介于Web服务器和Web应用程序(或Web框架)之间的一种简单而通用的接口 ...