1.动态特性

静态特性和动态特性,编译时和运行时

虚函数

(1)虚函数的叫覆盖,虚函数不是实现多态的唯一手段(其他语言也可能采用别的方法)。

抽象基类

(1)如果将基类的虚函数声明为纯虚函数,则基类为抽象基类。

(2)抽象基类不能被实例化,只能用来被继承用。

动态绑定

(1)每个具有虚函数的类称为多态类,这个虚函数可以是从虚函数继承的也可以是自己新增加的。

(2)C++编译器必须至少为每个多态类创建一个虚函数表(vtable),这里面实际上是一个指针数组,存放着这个类的

所有虚函数地址,也包括继承但未改写的虚函数。

(3)每个多态对象都有一个隐含指针vptr。

(4)派生类定义的名字(对象或函数名)将义无反顾的遮蔽(即隐藏)掉基类中任何同名的对象或函数。

(5)派生类中若是与基类中虚函数同名,而参数不同,那么编译器直接认为是隐藏,不会发生动态绑定。

运行时绑定

(1)C++多态手段有两种一种是虚函数机制,还有一种是RTTI技术

多态数组

(1)通过基类指针删除一个由派生类对象组成的数组,结果未定义。

(2)多态和指针算术运算不能混合运用,而数组操作基本会涉及到指针运算,因而多态和数组不应该混用。

(3)不要在数组中直接存放多态对象,而是换成基类指针或者基类的智能指针。

C++对象模型:

C++动态特性和C++对象模型——《高质量程序设计12章》的更多相关文章

  1. 高质量程序设计指南C/C++语言——C++/C程序设计入门

    1.在C++/C中,全局变量(extern或static)存放在程序的静态数据区中,在程序进入main()之前创建,在main()结束之后销毁,因此在我们的代码中根本没有机会初始化它们,于是语言及其实 ...

  2. 《高质量程序设计指南:C++/C语言》面试题整理

    本试题仅用于考查C++/C程序员的基本编程技能.内容限于C++/C常用 语法,不涉及 数据结构. 算法以及深奥的语法.考试成绩能反映出考生的编程质量以及对C++/C的理解程度,但不能反映考生的智力和软 ...

  3. C++,C程序设计入门——《高质量程序设计第4章》

    1. 连接规范 1. extern “C” 2. 一部分采用C的连接规范 #ifdef __cplusplus extern "C" { #endif #ifdef __cplus ...

  4. 内存管理(——高质量程序设计语言C/C++第16章)

    内存的分配方式: 1.静态存储区分配:全局变量,static变量等,在程序编译时已经分配了存储内存,在程序运行的整个期间一直存在 2.程序的堆栈上:程序的局部变量,包括程序的形参等,只存在于程序的运行 ...

  5. 高质量程序设计指南C/C++语言——malloc/free使用要点

  6. 高质量程序设计指南C/C++语言——有了malloc/free为什么还要new/delete?

  7. 高质量程序设计指南C/C++语言——内存管理

    • free()和delete只是把指针所指的内容给释放掉,并没有把指针本身删掉.指针被free()或delete以后其地址仍然不变(不等于NULL),只是该地址对应的内存是垃圾——p成了野指针.如果 ...

  8. 高质量程序设计指南C/C++语言——C++/C常量(2)

  9. 高质量程序设计指南C/C++语言——C++/C程序设计入门(4)

    *switch结构的break语句只是一个“jmp”指令,其作用就是跳到switch结构的结尾处 *标准C++/C语言提供3种循环:do/while.while和for,它们都在条件表达式为TRUE( ...

随机推荐

  1. 事件对象(示例、封装函数EventUtil())

    事件对象 什么是事件对象? 在触发DOM上的事件时都会产生一个对象. 事件对象event 1.DOM中的事件对象 (1)\type属性用于获取事件类型 (2)\target属性用于获取事件目标 (3) ...

  2. powerDesigner 一些设置

    常用设置 table中需要显示的内容 --------------------------------------------------------------------------------- ...

  3. DROP FUNCTION - 删除一个函数

    SYNOPSIS DROP FUNCTION name ( [ type [, ...] ] ) [ CASCADE | RESTRICT ] DESCRIPTION 描述 DROP FUNCTION ...

  4. java GZIP压缩与解压缩

    1.GZIP压缩 public static byte[] compress(String str, String encoding) { if (str == null || str.length( ...

  5. Robot Framework(十四) 扩展RobotFramework框架——创建测试库

    4.1创建测试库 Robot Framework的实际测试功能由测试库提供.有许多现有的库,其中一些甚至与核心框架捆绑在一起,但仍然经常需要创建新的库.这个任务并不复杂,因为正如本章所示,Robot ...

  6. sysUpload.vue上传组件 的时候 看进度的时候 不要mock 注释掉 // if (process.env.NODE_ENV !== 'production') require('@/mock')

    上传组件 的时候 看进度的时候 不要mock 注释掉 // if (process.env.NODE_ENV !== 'production') require('@/mock') <!-- * ...

  7. Java垃圾回收之新生代垃圾收集器

    问题:什么是Stop-the-World? 1.JVM由于要执行GC而停止了应用程序的执行 2.任何一种GC算法中都会发生 3.多数GC优化通过减少Stop-the-world发生的时间来提高程序的性 ...

  8. luogu P4752

    给定一个数字 A ,这个 A 由 a1,a2,...,aN 相乘得到. 给定一个数字 B ,这个 B 由 b1,b2,⋯,bM 相乘得到. 如果 A/B​ 是一个质数,请输出YES,否则输出NO. 输 ...

  9. 三、C++ const分析

    1.C语言中的const: const修饰的变量是只读的,本质还是变量 const修饰的局部变量在栈上分配空间 const修饰的全局变量在只读存储区分配空间 const只在编译期有用,在运行期无效 c ...

  10. InnoDB INFORMATION_SCHEMA System Tables

    InnoDB INFORMATION_SCHEMA System Tables 可以使用InnoDB INFORMATION_SCHEMA系统表提取有关InnoDB管理的schema对象的元数据. 此 ...