ChinaUnix.net
相关文章推荐:

虚继承时基类的内存位置

研究了一下继承,对象的内存分布模型,写了下面这个小程序 #include struct A {int x;int y; }; struct B : virtual public A { int a; B(){x=1;y=2;a=55;} }; struct C : virtual public A { int b; C(){x=3;y=4;b=66;} }; struct D : public B, public C { };//菱形继承 int main(void) { A a; B b; C c; D d; D *pd = &d; C *pd_c =(C*)(&d); B *pd_b =(B*)(&d); A *pd_a =(A*)(&d); printf("%d,%d,%d,%d\n",s...

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 using std::cout; using std::cin; using std::endl; class X{ int y; }; class A{ public: virtual void go(){}; int x; }; class B :virtual public A{ int x; }; class C : public virtual A{ int x; }; class D :virtual public B,virtual public C{ int x; }; ...

by daydayhappyacm - C/C++ - 2009-04-24 20:54:45 阅读(2455) 回复(3)

在《多继承》中讲过的例子中,由类A,类B1和类B2以及类C组成了类继承的层次结构。在该结构中,类C的对象将包 含两个类A的子对象。由于类A是派生类C两条继承路径上的一个公共基类,那么这个公共基类将在派生类的对象中产生多个基类子对象。如果要想使这个公共基类 在派生类中只产生一个基类子对象,则必须将这个基类设定为基类。   。。。。。。。。。。。。。 在《多继承》中讲过的例子中,由类A,类B1和类B2以及类C组成了类...

by wwm - Linux文档专区 - 2005-11-09 15:07:30 阅读(645) 回复(0)

比如说: 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,它的结构应该是什么样子的? 谢谢~~

by Redshadows - C/C++ - 2012-03-25 17:05:35 阅读(2659) 回复(11)

各位举例说明下,谢谢!

by kim1128 - C/C++ - 2011-08-29 08:11:59 阅读(6141) 回复(4)

本帖最后由 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;} }; 自己试了下,没发现功能上有什么不同 不好意思,刚才有点问题,有编辑了一下

by xdshting - C/C++ - 2010-09-09 14:54:48 阅读(7155) 回复(4)

[code]#include using namespace std; class A { virtual void f() {} }; class B: virtual public A { }; int main() { cout << sizeof(A) << endl; //含有一个指向表的指针,因此输出4 cout << sizeof(B) << endl; //这里为什么也输出4 return 0; }[/code][code]#include using namespace std; class A { int a; virtual void f() {} }; class B: virtual publi...

by chinesefys - C/C++ - 2013-05-09 22:04:40 阅读(1312) 回复(0)

有一段代码如下: #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)); } ...

by notcat - C/C++ - 2009-09-01 19:11:24 阅读(2173) 回复(3)

请问,基类中的成员函数能否调用本基类的纯函数哪? 如果可以,那被调用的函数就是在派生类中定义的。 基类是通过什么找到这个派生类中定义的成员函数?

by _mystic - C/C++ - 2010-05-28 12:15:35 阅读(8383) 回复(7)

在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中第二...

by gp101224 - C/C++ - 2005-11-22 11:07:37 阅读(9611) 回复(20)

[code] #include ; #include ; using namespace std; class B { public: B():b_("Base Class") { init(); } virtual void init() { cout<<"In class B's init!\n"; cout<

by biansj - C/C++ - 2003-03-04 23:36:59 阅读(2744) 回复(14)