码迷,mamicode.com
首页 > 编程语言 > 详细

深入探索C++对象模型->1.3对象的差异

时间:2016-08-21 11:00:47      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:

一、C++程序设计直接支持三种程序设计模式(programming paradigms),程序模型、程序数据类型模型(OB)、面向对象模型(OO)

  1、程序模型:类似C语言,用过程型语句组成。

  2、抽象数据类型模型:所谓抽象就是讲实现和接口分离,显示提供接口,隐藏实现。(PS:不支持虚函数和多态)。

  3、面向对象模型:通过一个抽象的base class(用以提供共同的接口),将一系列有关联的类型封装起来。通过引用和指针来提供多态。

二、一个Class object共需要多少内存来表示呢?

  1、其nonstatic members的总和大小。

  2、加上任何由于alignment的需求而填补上去的空间(可能存在于members之间,也可能存在于集合体边界)

  3、加上为了支持virtual而由内部产生的任何额外负担。

三、指针与指针之间有什么不同呢?“指针类型”会教导编译器如何解释某个特定地址中的内存内容及其大小。

四、

/*
*ZooAnimal是基类,bear是派生类,rotate()是两者的虚函数
*/
Bear b;
ZooAnimal za = b;

za.rotate();

  这里存在两个问题:1、为什么rotate()调用的ZooAnimal::rotate()而不是Bear::rotate()?2、如果初始化函数将一个object内容拷贝到另一个object去,为什么za的vptr不指向Bear的vtbl?

对于第一个问题:直接通过对象调用并不支持多态,并且通过za里保存的virtual function机制调用,在编译期确定。

对于第二个问题:编译器保证一个对象里面vptr内容并不会因为assignment赋值、拷贝所改变。

 

深入探索C++对象模型->1.3对象的差异

标签:

原文地址:http://www.cnblogs.com/linux-hp/p/5791352.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!