c++ 对象笔记1

(1)对象模型
    1.简单对象类型
    2.表驱动对象模型
    3.实现模型
   
C++采用实现模型:
    nostatic data member 被放置在对象内部,Static data members, Static and nonstatic function members 均被放到对象之外。
   对于虚函数的支持则分两步完成:
     1.为每个类生成了一个虚函数表。
     2.指向相关虚表的指针被插入到每个对象中。
   优点:访问和空间效率提高
   缺点:如果应用程序本身未改变,但当所使用的类的non static 数据成员添加删除修改的时候,需要重新编译。
  
(2)struct 与 class
        struct 默认public,其它基本与class一致。
        另外在内存布局上可能有些不同。C++保证同一个acccess section 内的变量按照声明次序进行内存的布局,但不保证不同section之间
     的布局。同样子类与父类的成员布局也没有明确的规定。而采用struct可以保证C风格的布局要求。只有在把struct作为一个成员时才能保
     证这样的与c兼容的布局,但当以一个struct作为基类时,无法保证子类会不会向基类的成员布局里安插新的数据成员,从而改变已有的布局

(3)实现多态,必须使用对象的指针或者引用。是一种运行时的行为,而对于对象实体则在编译期就已经确定了。
(4)如果确定object内存大小?
     1.所有的non static 数据member;
     2.由于内存对齐要求产生的填充;
     3.由于虚函数产生的开销,比如vptr;
     4.可能需要一个指向虚基类的开销。
    
    那么成员函数的指向又是如何确定的呢?    
     指针类型的不同在于其指向的内容的类型和大小不同。
     不同类型的指针的不同在于指针的span(跨度)不同,比如我们用指向子类的对象的父类指针便无法访问了类里的public成员变量或者函数
     (这体现了对指针类型的深刻理解)。即使具有多态的支持,父类的指针也只能对那些在该类出现的名字进行访问,无法访问子类特有的。
     通过多态,只是实现了同名函数不同实体的调用。对于父类指针所进行的调用编译时刻只会确定如下两项:固定的可用接口,接口的访问
     级别。而了类的指针则可以访问从父类继承下来的那些成员,但要注意可能发生的遮蔽

posted on 2011-09-19 17:14  belie8  阅读(159)  评论(0编辑  收藏  举报

导航