C++ 对象的内存布局(下)这篇文章的“单一虚拟继承”和“钻石型虚拟继承”时的类内存布局讲得不太清楚,我有一处疑问,我用的是VS2005,因此记录一下。
类继承图如下:
这里:类B被类B1和B2虚拟继承,而B1和B2同时被D继承。
B1的f()、B2的f()覆盖了B的f();
D的f()覆盖了B1的f(),D的f1()覆盖了B1的f1()
D的f()覆盖了B2的f(),D的...
分类:
编程语言 时间:
2014-08-19 14:38:24
阅读次数:
228
C++构造函数 & 拷贝构造函数 & 派生类的构造函数 & 虚继承的构造函数...
分类:
编程语言 时间:
2014-08-16 22:34:31
阅读次数:
306
构造函数 ,是一种特殊的方法 。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。(摘自百度百科构造函数)。一、最基本的构造函数1 class...
分类:
编程语言 时间:
2014-08-14 23:15:16
阅读次数:
253
/** * java 中的每一中操作,操作的数据类型必须合法。父类有的方法子类都有 * 凡是能够使用父类生成对象的地方都可以使用子类生成对象. * * 多态性 * 是指允许不同类的对象对同一消息作出响应。 * 多态性包括参数化多态性和包含多态性。多态性语言具有灵活、 * 抽象、行为共...
分类:
编程语言 时间:
2014-08-14 19:49:59
阅读次数:
380
这篇文章主要讲解虚继承的C++对象内存分布问题,从中也引出了dynamic_cast和static_cast本质区别、虚函数表的格式等一些大部分C++程序员都似是而非的概念。原文见这里(By Edsko de Vries, January 2006) 敬告:本文是介绍C++的技术文章,假定读者对于C...
分类:
其他好文 时间:
2014-08-13 18:12:16
阅读次数:
234
寻踪浅析 封装、继承、多态是面向对象语言的三大特性,熟悉C++的人对此应该不会有太多异议。C语言提供的struct,顶多算得上对数据的简单封装,而C++的引入把struct“升级”为class,使得面向对象的概念更加强大。继承机制解决了对象复用的问题,然而多重继承又会产生成员冲突的问题,虚继承在我....
分类:
其他好文 时间:
2014-08-12 13:25:04
阅读次数:
250
桥接模式:
(1),继承很多情况下会带来麻烦,比如:对象的继承关系在编译时就定义好了,所以无法在运行时改变从弗雷继承的实现。子类的实现与它的弗雷有非常紧密的依赖关系,以至于弗雷视线中的任何变化必然会导致子类发生变化。当你需要复用子类时,如果继承下来的实现不适合解决新的问题,则父类必须重写或被其他更适合的类代替。这种依赖关系限制了灵活性并最终限制了复用性。
(2),合成/聚合服用原则(C...
分类:
其他好文 时间:
2014-08-09 00:16:46
阅读次数:
403
为何要内部类? a、内部类提供了某种进入外围类的窗户。 b、也是最吸引人的原因,每个内部类都能独立地继承一个接口,而无论外围类是否已经继承了某个接口。 因此,内部类使多重继承的解决方案变得更加完整。 在项目中,需要多重继承,如果是两个接口,那么好办,接口支持多重继承。 如果是两个类呢?这时只有使用....
分类:
编程语言 时间:
2014-08-08 17:37:26
阅读次数:
302
代码:
#include
using namespace std;
/*
class a{
float k; // 4字节
virtual void foo(){} //有一个4字节的指针指向自己的虚函数表
};
class b : virtual public a{
virtual void f(){}
}; 有这样的一个指针vptr_b_a,这个指针叫虚类指针,也是四个字节...
分类:
其他好文 时间:
2014-08-07 23:23:25
阅读次数:
465
Java语言并不支持多重继承,而只能继承一个类,不过我们可以使用implements来实现多个接口。 extends继承的父类:不能声明为final或者定义为abstract; implements实现接口interface,用逗号分开就好; 如:class A extends B implemen...
分类:
编程语言 时间:
2014-08-02 12:45:53
阅读次数:
482