
深度搜索C++对象模型
路痴的旅行
一生有你
展开
-
第二章构造函数语义学——关于bitwise copy semantics
关于这个问题,第一遍看的时候比较晕,不知道这个什么 bitwise copy是个什么东西,其实很简单,就是 位逐次拷贝(我靠,一句好犀利的废话)。额,具体来说呢,就是对 源类中的成员变量 中的每一位 都逐次 复制到 目标类中。具体的内容接着看。首先让我们看看这个概念是怎么出来的。书中第50页的时候说到:Default constructors 和 copy constructors 在 必要的...转载 2018-03-10 18:55:12 · 1006 阅读 · 2 评论 -
谈谈C++继承中的重载,覆盖和隐藏
写正题之前,先给出几个关键字的中英文对照,重载(overload),覆盖(override),隐藏(hide)。在早期的C++书籍中,可能 翻译的人不熟悉专业用语(也不能怪他们,他们不是搞计算机编程的,他们是英语专业的),常常把重载(overload)和覆盖(override)搞错! 我们先来看一些代码及其编译结果。1 实例一:#include <iostream>usin...转载 2018-04-14 10:41:02 · 847 阅读 · 0 评论 -
C++ 避免隐藏继承而来的名称(为什么会有类函数隐藏?)
关于C++中继承这个概念相比大家都很熟悉,那么子类究竟能从父类继承到哪些东西,哪些东西又是子类继承不到的呢?可能很多人都会觉得父类所有的东西都会被子类继承,包括成员函数和成员变量,否则就违背了“父子关系”这字面上的意思,其实不然,首先我们先看一小段简单的代码,这段代码很容易理解 #include <iostream>using namespace std;...转载 2018-04-17 20:27:59 · 716 阅读 · 0 评论 -
C++ 虚函数表解析
前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函数的使用方法...转载 2018-04-15 16:16:38 · 169 阅读 · 0 评论 -
虚基类的作用
1 概念 首先还是先给出虚继承和虚基类的定义。虚继承:在继承定义中包含了virtual关键字的继承关系;虚基类:在虚继承体系中的通过virtual继承而来的基类,需要注意的是:CSubClass : public virtual CBase {}; 其中CBase称之为CSubClass的虚基类,而不是说CBase就是个虚基类,因为CBase还可以作为不是虚继承体系中的基类。 Virt...转载 2018-03-07 22:10:34 · 8497 阅读 · 0 评论 -
C++类内存分布
1 环境搭建 书上类继承相关章节到这里就结束了,这里不妨说下C++内存分布结构,我们来看看编译器是怎么处理类成员内存分布的,特别是在继承、虚函数存在的情况下。工欲善其事,必先利其器,我们先用好Visual Studio工具,像下面这样一步一步来: 先选择左侧的C/C++->命令行,然后在其他选项这里写上/d1 reportAllClassLayout,它可以看到所有相关类的内...转载 2018-04-14 23:56:51 · 232 阅读 · 1 评论 -
单继承与多继承中的虚函数表和虚函数指针
编译环境: VS 2013首先,我们了解一下何为单继承,何为多继承??单继承:一个子类只有一个直接父类。多继承:一个子类有两个或多个直接父类。单继承中的虚函数表分析:示例程序:#include <iostream> using namespace std; typedef void(*FUNC)(); class Base { public: ...转载 2018-04-02 16:20:01 · 746 阅读 · 0 评论 -
bss段
1. 理论BSS(Block Started by Symbol)用来存储未初始化的全局变量和静态变量,全局变量或静态变量值为0或NULL(对于指针变量而言)的通常会被编译器认为未初始化,属于静态内存分配区,不会占用程序文件空间,不存储这些变量在外存上,但是还是会占用一部分空间,这些空间用来标识未初始化的变量大小、属性等信息.DATA用来存储已经初始化的全局变量,也属于静态内存分配区,会占用程序文...转载 2018-03-21 22:53:59 · 1713 阅读 · 0 评论 -
关于C++全局变量和静态变量初始化的一些总结
1.全局变量 全局变量无疑要在main函数开始前执行完成,但可细分为在编译时和在运行时初始化,即static initialization和dynamic initialization。 static initialization 静态初始化按照我的理解,是针对那些较为简单的,c++内部定义的数据结构,如int,double,bool及其数组结构的初始化。又可分为zero...转载 2018-03-22 23:33:59 · 4120 阅读 · 0 评论 -
《深度探索C++对象模型》读书笔记
前 言 Stanley B.Lippman1. 任何对象模型都需要的三种转换风味:ü 与编译器息息相关的转换ü 语言语义转换ü 程序代码和对象模型的转换 2. C++对象模型的两种解释ü 语言中直接支持面向对象程序设计的部分ü 对于各种支持的底层实现机制 3. C++ class的完整virtual function...转载 2018-03-12 23:59:49 · 290 阅读 · 0 评论 -
C/C++中volatile的用法
代码编译环境:Windows7 32bits+VS2012。volatile是“易变的”、“不稳定”的意思。volatile是C/C++的一个较为少用的关键字,它用来解决变量在“共享”环境下容易出现的读取错误的问题。1.volatile的作用定义为volatile的变量是说这变量可能会被意想不到地改变,编译器在优化时,用到这个变量每次都从重新从RAM读取这个变量的值,而不是使用保存在寄存器里的备份...转载 2018-03-18 23:04:35 · 2669 阅读 · 0 评论 -
编译器合成复制构造函数
定义: 只有单个形参,该形参是对本类类型对象的引用(常用const修饰),这样的构造函数成为复制构造函数。使用方式:(1)显示使用----用一个同类型的对象初始化该对象时;(2)隐式使用----将该类型的对象传递给函数或从函数返回该类型对象时。三种类型的复制构造函数:*bitwise copy constructor :逐位复制-----默认方式*合成的 copy constructor...转载 2018-03-12 20:19:02 · 372 阅读 · 0 评论 -
静态函数能否为virtual或者const函数
1. virtual与静态函数C++中,静态成员函数不能被声明为virtual函数。例如,下面的程序会编译失败。#include<iostream>class Test{ public: // 编译错误:static成员函数不能声明为virtual virtual static void fun() { }};同样地,静态成员函数也不能被声明...转载 2018-03-18 16:21:57 · 994 阅读 · 0 评论 -
《深度探索C++对象模型(Inside The C++ Object Model )》学习笔记
之前一直对C++内部的原理的完全空白,然后找到《Inside The C++ Object Model》这本书看了下, 感觉收获很大,因为书写得比较早,有些知识应该要更新,但是还是值得好好研读,由于该书的内容给人比较散的感觉,所以一直想找个时间整理一下,遂成此文,虽然都是抄书上的,但是却让我有了温故而知新的觉悟,附近里有三个好资料,一并共享了!2012年9月2日凌晨 4:31 谢谢 张雨生的歌声的...转载 2018-03-10 21:16:22 · 271 阅读 · 0 评论