随笔 - 27  文章 - 88  trackbacks - 0
<2008年5月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

常用链接

留言簿(4)

文章分类(3)

文章档案(3)

搜索

  •  

积分与排名

  • 积分 - 129537
  • 排名 - 198

最新评论

阅读排行榜

评论排行榜

 

第一章 关于对象

C++布局以及存取时间是主要的额外负担是由 virtual 引起,包括:

Virtual function 机制 用以支持一个有效率的“执行期绑定”(running binding.

       Virtual base class 用以实现“多次出现在继承体系中的base class ,有一个单一而被共享的实体”。

 

1.1 C++ 对象模型(the c++ object model

       简单对象模型(a simple object model

       在这个简单模型中,一个object是一系列的slots,每一个slot指向一个member. Members按其声明次序,各被指定一个slot.每一个data member function member 都有自己的一个slot.

       表格驱动对象模型(A Table-driven object Model

       是把所有与members 相关的信息抽象出来,放在一个data member table和一个member function table之中,class object 本身则内含指向这两个表格的指针。

       C++对象模型(The C++ Object Model                   

       在此模型中,Nonstatic data members 被配置在每一个class object 之内,static data members 则被存放在所有的class object 之外。Static nonstatic function members 也被放在所有的class object 之外。 Virtual functions 则以两个步来支持:

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

       2.每一个class object 被添加一个指针,指向相关 virtual function.      

1.2 关键词所带来的差异(A Keyword Distinction

       C struct C++中的一个合理用途,是当你要传递“一个复杂的class object 的全部或部分”到某个C函数中去时,struct 声明可以将数据封装起来,并保证拥有与C兼容的空间布局。然而这项保证只在组合(composition)的情况下才存在。如果是“继承”而不是“组合”,编译器会决定是否应该有额外的data members 被安插到 base struct subobject 之中。

1.3 对象的差异(An Object Distinction

       C++ 以下列方法支持多态:

1. 经由一组隐含的转化操作,例如把一个derived class 指针转化为一个指向其 public base type 的指针:

Shape *ps = new circle();

       2. 经由 virtual function 机制

              Ps->rotate();

       3. 经由 dynamic_cast typeid 运算符:

              If(circle *pc = dynamic_cast<circle *> (ps)) …

    一个pointer 或一个reference 之所以支持多态,是因为它们并不引发内存中任何“与类型有关的内存委托操作(type-dependent commitment)”;会受到改变的只是它们所指向的内存的“大小和内容解释方式”而已。

posted on 2008-05-20 22:24 Macaulish 阅读(1794) 评论(7)  编辑 收藏 引用

FeedBack:
# re: Inside the c++ object model (一) 2008-05-21 08:52 张楠
不错,正打算看这本书呢。希望博主继续!!  回复  更多评论
  
# re: Inside the c++ object model (一) 2008-05-21 14:01 Z_song
期待博主继续,我也正打算看这本书  回复  更多评论
  
# re: Inside the c++ object model (一) 2008-05-21 15:40 fengmin
谢谢支持哈,呵呵@张楠
  回复  更多评论
  
# re: Inside the c++ object model (一) 2008-05-22 08:56 橙子
1.2 关键词所带来的差异(A Keyword Distinction)
这段看得不是很明白,感觉
struct CA
{
...
}

class
{
public:
...
}
是一样的.  回复  更多评论
  
# re: Inside the c++ object model (一) 2008-05-23 14:25 fgcmaster
前面几张看着还好,可后面的就比较难懂些。  回复  更多评论
  
# re: Inside the c++ object model (一) 2008-05-29 21:09 骑白马的唐僧
正在看primer  回复  更多评论
  
# re: Inside the c++ object model (一) 2008-06-06 21:27 fengmin
我也正在看C++ primer。有点难哈!有机会多交流交流!@骑白马的唐僧
  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理