zoukankan      html  css  js  c++  java
  • C++对象模型---第 1 章 关于对象

    1. 使用class封装之后的布局成本:
            (1)class并没有增加成本,data members直接内含在每一个class object之中,就像C struct一样。而member functions虽然被包含在class的声明之内,但是不出现在Object之中。每一个non-inline function 只会产生一个函数实体。至于inline function则会在每一个调用使用的地方产生一个函数实体(在调用点展开函数体)。
            (2)class在布局以及存取时间上主要的额外负担是由virtual 引起,包括:
                           a. virtual function 机制用以支持一个有效率的“执行期绑定(runtime binding)”。
                           b. virtual base class 用以实现“多次出现在继承体系中的 base class ,有一个单一的被共享的实体”。
                           c. 发生在“一个 derived class 和其第二或后继之 base class 的转换”之间。
     
    2. C++对象模型:
            (1)类的模型结构:nonstatic function member 和 static function member 在类外。static data member 在类外。nonstatic data member 在类内。
            (2)虚表:每个class 产生出一堆指向虚函数的指针,放在表格中,这个表格称为虚表(vtbl)。
            (3)虚基类表:每个drive class 产生一堆指向虚基类的指针,放在表格中,这个表格称为虚基类表(btbl)。但是会产生存取时间上的额外负担
            (3)每个class关联的 type_info object (用于RTTI)也由虚表指出来,通常放在表格第一个slot中。
            (4)vptr:每个class object 安插一个指针,指向相关的vtbl,称为vptr。
            (5)bptr:每个class object 安插一个指针,指向相关的btbl,称为bptr。
        
     
    3. class object 需要多少内存:
                (1)nonstatic data members的总和大小。
                (2)加上由于alignment(校验)的需求而padding(填补)上去的空间。
                (3)加上为了支持 virtual 而由内部产生的额外负担。
     
    4. 指针类型:
                    指针类型告诉编译器如何解释某个特定地址中的内存及其大小。
                    dynamic_cast(指针转型),不会改变指针指向的真实地址,只会影响编译器对于“被指向内存的大小和内容”的解释方式。
     
     5. C++ 以下列方法支持多态:
                (1)经由一组隐含的转化操作。例如把一个 derived class 指针转换为一个指向其 public base type的指针:
                            baser *p = new driver();
                (2)经由 virtual function 机制:
                            p->rotate();
                (3)经由dynamic_cast和typied运算符:
                            driver *dd = dynamic_cast<driver *>( p );
  • 相关阅读:
    另一种保证单次插入回文自动机复杂度的做法
    loj #6070. 「2017 山东一轮集训 Day4」基因
    求第一类斯特林数的一行
    NOIP2018游记
    HDU3377 Plan
    【BZOJ】1830: [AHOI2008]Y型项链
    【BZOJ】1832: [AHOI2008]聚会
    【BZOJ】1831: [AHOI2008]逆序对
    【BZOJ】1085: [SCOI2005]骑士精神
    【BZOJ】1798: [Ahoi2009]Seq 维护序列seq
  • 原文地址:https://www.cnblogs.com/ladawn/p/8205032.html
Copyright © 2011-2022 走看看