《深度探索C++对象模型》读书笔记(1)

在C++中,有两种class data members:static和nonstatic,以及三种class member functions: static、nonstatic和virtual.已知下面这个class Point声明:

class Point ...{
public:
Point(float xval);
virtual ~Point();

float x() const;
static int PointCount();

protected:
virtual ostream& print(ostream &os) const;

float _x;
static int _point_count;
};

在 Stroustrup当初设计的C++对象模型中,Nonstatic data members被配置于每一个class object之内, static data members则被存放在所有的class object之外。Static和nonstatic function members也被 放在所有的class object之外,Virtual functions则以两个步骤支持之:

(1)每一个class产 生出一堆指向virtual functions的指针,放在表格之中,这个表格被称为virtual table(vtbl)。

(2)每一个class object被添加了一个指针,指向相关的virtual table.通常这个指针被称为 vptr.vptr的设定(setting)和重置(resetting)都由每一个class的constructor、destructor和copy assignment运算符自动完成。每一个class所关联的type_info object(用以支持runtime type identification,RTTI)也经由virtual table被指出来,通常是放在表格的第一个slot处。


***虚 拟继承***

继承关系也可以指定为虚拟(virtual,也就是共享的意思):

class istream : virtual public ios ...{ ... };
class ostream : virtual public ios ...{ ... };
class iostream : public istream,public ostream ...{ ... };

在虚拟继承 的情况下,base class不管在继承串链中被派生(derived)多少次,永远只会存在一个实体(称为 subobject)。例如iostream之中就只有virtual ios base class的一个实体。

***指针的类型 ***

下面有一个ZooAnimal声明:

class ZooAnimal ...{
public:
ZooAnimal();
virtual ~ZooAnimal();

// ...
virtual void rotate();

protected:
int loc;
String name;
};

时间: 2024-09-05 20:05:14

《深度探索C++对象模型》读书笔记(1)的相关文章

《移动设备交互设计》读书笔记[1]

读书笔记,不是对书中的内容做完全的摘抄和援引,我是想把读过的内容,经过自己的理解归纳总结出来与大家分享讨论.一.如何理解移动设备 移动设备是相对于不可移动的设备,这里说的不可移动设备不仅指计算机设备,可以包括游戏机,甚至普通电视机.对应的会有掌上游戏机或是移动电视机等,当然,重要的还是我们大家都在讨论的可以做移动互联网应用的多功能手机.同时,还包括一些更广义的移动设备,比如: 1)可穿戴设备,目前这种设备可能还应用于军事和医疗方面,比如战斗机飞行员戴的可交互信息航空头盔,比如特种兵的数字头盔等.

移动设备交互设计:移动设备的手势设计

文章描述:移动设备手势设计初探.   嘿~最近在做各种移动端的产品,设计啊体验啊操作啊,用的手都起茧,工作之余也思考了"手"这种较新的交互方式,以及它与界面的关系.本文从手势的种类,应用场景,存在的可用性问题以及如何设计四个大的部分谈起,在此抛砖引玉供大家思考和学习. 移动设备大行其道的今天,手势是一个流行词汇,那手势是什么呢?手,是人类各种创造性活动的天然工具,人们天生就会使用手的动作去表达情感,比如人们会使用握手来表示友好,聋哑人使用一套用手语来代替语言交流,这些都是手势在生活中的

javascript框架设计读书笔记之种子模块_javascript技巧

1.命名空间: js里面的命名空间就是使用对象的属性来扩展的.比如,用户定义一个A对象,A对象下面有B属性和C属性,同时B属性和C属性又是对象.因此A={B:{},C:{}},这时用户就可以在B对象和C对象中定义一样的方法,属性了.因此B和C就属于不同的命名空间.我们调用B,C对象里面的方法,就可以通过A.B.like(),A.C.like()调用了.当然A属于window对象中的属性. 但是有一种情况,比如:boke.jsp页面引入了jquery.js以及prototype.js(他们都会在w

移动设备交互设计:Android应用程序不需要手动退出

文章描述:Android应用程序需不需要手动退出? 不止一次,也不止一个人问过这个问题.我都回答了:不需要.但是,还是要记录下来. 我们不妨从了解这个系统对于应用程序管理的一些内部机制开始说明原因. 对于Android系统而言,包含"进程"和"服务"."进程"有正在运行的,也有刚刚离开在后台缓存的."服务"是一个无界面.长时间运行的应用功能,并且不会轻易被终止. 我们知道,在Android中可以快速通过主页键(home)或者使

移动设备交互设计:手机输入法的键盘布局

文章描述:手机输入法:键盘布局那点儿事. 输入法,我国一个神奇特色的存在. 在国内,手机输入法可能是玩家用得最多的应用了.但凡是红红火火的操作系统,像Symbian.Android.iOS等平台,都可安装第三方输入法.由于原生中文输入的种种不给力,这给了大量厂商开发输入法的动力和机会. 本文这次只谈针对触屏手机设计的输入法,而由于其博大精深,这里我只谈谈输入法键盘的布局,而且还是触屏手机的. T9与全键盘 这两种大概是日常生活中接触最多的键盘了.原生的Windows Mobile自带的输入法便是

javascript框架设计读书笔记之模块加载系统_javascript技巧

模块加载,其实就是把js分成很多个模块,便于开发和维护.因此加载很多js模块的时候,需要动态的加载,以便提高用户体验. 在介绍模块加载库之前,先介绍一个方法. 动态加载js方法: 复制代码 代码如下: function loadJs(url , callback){ var node = document.createElement("script");       node[window.addEventListener ? "onload":"onre

javascript框架设计读书笔记之字符串的扩展和修复_javascript技巧

1.repeat方法:将一个字符串重复自身n次.比如:repeat("chaojidan",2)   -> chaojidanchaojidan 方法1: 复制代码 代码如下: function repeat(str,n){ return Array.prototype.join.call({length:n+1},str);  //在类数组{length:n+1}上下文下执行join方法,并传入str.也就是用str来分隔类数组的选项,类数组是空,所以就有n个str分隔n+1个

javascript框架设计读书笔记之数组的扩展与修复_javascript技巧

1.indexOf和lastIndexOf方法: 因为IE7在数组对象上使用indexOf会报错,所以需要重写一个兼容性的. 复制代码 代码如下: Array.prototype.lastIndexOf(item,index){ var n = this.length,i = (index==null||index>n-1)?n-1:index; if(i < 0) i = n+i; for(;i>=0;i--) if(this[i] === item)   //全等判断,indexOf

用讲故事的方式来做手机产品交互设计

2011中国交互设计体验日在北京举行,elya和Alex代表百度MUX出席并主持了"用讲故事的方式来做手机产品交互设计"的工作坊. 随着移动互联网浪潮滚滚来袭,移动设备交互设计师是时代的弄潮儿.你需要知道怎样为真正的目标用户做设计;需要知道真实用户的使用场景;需要知道怎样让你的产品变得用血有肉;需要知道怎样用讲故事的方式来做产品;需要知道怎样将讲故事的方法贯穿到设计循环中去,本次工作坊也是力求通过一些我们尝试过的方法,跟大家一起展开探讨. 一.手机产品交互设计 十年间,从小屏到大屏,从

服务的协作:服务间的消息传递——《微服务设计》读书笔记

很多开发者都表示他们基于HTTP的API是RESTful的.但是,如同Fielding在他的博客中所说,这些API可能并不都是RESTful的.Leonard Richardson为REST定义了一个成熟度模型,具体包含以下4个层次(摘自IBM): 第一个层次(Level 0)的 Web 服务只是使用 HTTP 作为传输方式,实际上只是远程方法调用(RPC)的一种具体形式.SOAP 和 XML-RPC 都属于此类. 第二个层次(Level 1)的 Web 服务引入了资源的概念.每个资源有对应的标