研究了一下虚拟继承时,对象的内存分布模型,写了下面这个小程序
#include
by jeanlove - C/C++ - 2009-03-02 14:41:50 阅读(1330) 回复(3)
// world.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include
在《多继承》中讲过的例子中,由类A,类B1和类B2以及类C组成了类继承的层次结构。在该结构中,类C的对象将包 含两个类A的子对象。由于类A是派生类C两条继承路径上的一个公共基类,那么这个公共基类将在派生类的对象中产生多个基类子对象。如果要想使这个公共基类 在派生类中只产生一个基类子对象,则必须将这个基类设定为虚基类。 。。。。。。。。。。。。。 在《多继承》中讲过的例子中,由类A,类B1和类B2以及类C组成了类...
比如说: class A {}; class B : virtual public A {}; class C : virtual public A {}; class D : public B, public C {}; 用g++编译 B和C的大小应该4个字节,因为他们里面存放着一个指向A的指针。 而D的大小是8个字节,请问D中不应该只是存放着一个指向A的指针么??? 还有就是对于class B,它的结构应该是什么样子的? 谢谢~~
本帖最后由 xdshting 于 2010-09-09 14:54 编辑 class a { public: int x; a(int a=0){x=a;} }; class b:virtual public a { public: int y; b(int a,int b):a(b) {y=a;} }; class c:public virtual a { public: int z; c(int a,int b):a(b) {z=a;} }; 自己试了下,没发现功能上有什么不同 不好意思,刚才有点问题,有编辑了一下
[code]#include
有一段代码如下: #include "stdio.h" void main(void){ class A {}; class B : virtual public A {}; class C: public A {}; class D: public B, public C {}; class E: virtual public B, virtual public C {}; printf("sizeof(A) = %d\n",sizeof(A)); printf("sizeof(B) = %d\n",sizeof(B)); printf("sizeof(C) = %d\n",sizeof(C)); printf("sizeof(D) = %d\n",sizeof(D)); printf("sizeof(E) = %d\n",sizeof(E)); } ...
在Addison Wesley 出版的C++ FAQS, 2nd Edition中的FAQ 17.06中说: Q:Can a derived class pointer be converted into a pointer to its public base class? A:Such conversions are possible and don't even require a pointer cast. class Vehicle { }; class Car : public Vehicle { }; void f(Vehicle* v) throw(); void g(Car* c) throw() { f(c); //Perfectly safe; no cast needed } 而在侯捷的深入浅出MFC中第二...
[code]
#include