- 博客(5)
- 资源 (3)
- 收藏
- 关注
原创 C++对象模型(五)
<br />第四章函数语义学<br />众所周知的,在C++ 中,跟类相关的成员函数有三种,静态函数、非静态函数、虚拟函数。本章介绍了这几种函数的来源、用在何处、编译器如何实现、及效率。<br />非静态成员函数:<br />简单的说,非静态成员函数就是非成员函数中加入了一个this 指针的参数(不需要其他更多的解释了)。<br />书中还特意提到了名称的特殊处理(Name Mangling )。<br />一般来说,对于一个非静态成员函数,Name Mangling 的处理后的函数名是:函数名+类
2010-11-22 23:23:00 432 1
原创 C++对象模型(四)
<br />指向数据成员的指针<br />使用指向数据成员的指针,关键是看这个类的vptr 放在类的哪个部位。一般放在头部或尾部。<br />对于某些编译器,往往还用在位移上加一个字节。加这个字节的目的是,区分没有指向任何数据成员的指针和已经指向一个数据成员的指针。因为,如果没有这个字节,当指针指向第一个类成员时,有可能和空指针的内容相同。<br />在VC 编译器中,没有该附加的字节。<br />#include <stdio.h><br /><br />class Pointnd<br />{<br
2010-11-21 20:37:00 374
原创 C++对象模型(三)
多重继承的数据成员布局<br />这里解释了这样的问题:当一个类从多个类继承时,并且这些类可能从其他类中继承的情况下,类的数据结构如何布局?<br />答案是,先将基类的成员依次排列,最后放本类的数据成员。<br />问题是有多个基类,这些基类的顺序是怎样的呢?C++ 标准并没有定义。但是一般来说,编译器会把先定义的基类的数据成员放在前面。<br />由此,写代码的时候,如果需要将派生类转换为基类类型时,必须注意以下两点:<br />1、 如果在派生类中,该基类成员排在所有数据最前面,则直接转换,不
2010-11-21 00:03:00 336
原创 C++对象模型(二)
第三章 数据语义学 本章着重介绍了C++的类数据对象的布局。对于一般的类来说,影响内存布局的几个因素主要有:1、 语言本身的负担,如vptr等;2、 编译器对特殊情况的处理;3、 字节对齐的限制。 这些都影响了类的大小。 C++标准没有明确规定编译器各种数据的编排规则,只是规定“较晚出现的成员具有较高的地址”。所以,在一
2008-08-24 17:23:00 376
原创 C++对象模型(一)
第二章 构造函数一、缺省构造函数 构造函数令人烦恼的一点是总是在编写代码不知道的情况下产生。本章就是针对这个问题,说明构造函数在什么情况下产生。 构造函数的产生原则:在需要的时候产生! 那么什么时候是需要的时候呢?“需要”分为用户需要和编译器需要。如果用户需要在构造函数中初始化对象,那么,这是用户的责任,编译器是不会干预的
2008-08-21 21:02:00 441
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人