摘要:
刚想到一个问题,一直在思考C++中对象地址与接口指针的故事。问题:多继承的情况下,一个具体类对象实现了多个接口,那么多该对象获取的不同接口指针是一样的吗?不是一样吗?不是对象地址吗?……困惑原因,对于多态设计的类的具体对象的首地址是存放类属虚表指针,编译器通过此指针来访问多态方法调用入口。那么多继承情况下呢?该对象类属的虚表会如何设计呢?此问题结合了多继承,那么必然也就该先想想C++对多继承的支持将是何种实现方式,通过读书读报,在一本名为《C++对象模型》的书得到点思想启示,当然很旧很旧之前我也试验过VS编译对多继承方式的疑问考证。确实,显然就组合各基类为基础再加以扩展。和组装模式差不多,不过 阅读全文
posted @ 2013-06-19 19:33
鱼木
阅读(295)
评论(0)
推荐(0)
摘要:
由于语义上的需要导致语法的上缺陷,所以导致对象数组在C++中存在陷阱。C++语境:一个基类指针或引用是可以指向派生类对象的,以此可来表现C++对运行时多态的需求;创建一个对象数组将返回首元素的首地址,因此该地址是可以被该对象所有类属指针所接纳,无编译错误。而问题就在这里,这是个陷阱!因为数组是所有语言都支持的一种顺序存储形式。从C开始支持的数组,数组操作其实就是相对寻址方式,使用指针是间接寻址方式,因为都是地址操作,因此可以使用指针来描述一个动态数组,即堆申请的数组。但数组元素的寻址,就需要偏移量计算,此依赖类型的size来计算。因此操作数组时必须明确对象的真实类型才能正常工作。所以将C++多 阅读全文
posted @ 2013-06-19 09:13
鱼木
阅读(191)
评论(0)
推荐(0)