C++ - 多继承

来源:互联网 发布:java高并发项目 编辑:程序博客网 时间:2024/06/17 15:36

class B   class C

   ^             ^

    /             /

      /         /

        /     /

      class D

 

p=24500,*p=217f8
p=24504,*p=b
p=24508,*p=21804
p=2450c,*p=c
p=24510,*p=d

 

 

        class A

           ^

          /  /

      /         /

   /               /

class B   class C

   ^             ^

    /             /

      /         /

        /     /

      class D

 

 

p=41390,*p=21a88
p=41394,*p=a
p=41398,*p=1
p=4139c,*p=b
p=413a0,*p=21a94
p=413a4,*p=a
p=413a8,*p=1
p=413ac,*p=c
p=413b0,*p=d

 

-- appendix: definition of class A, class B, class C

 

class A {
public:
        A():a(0xa),i(0x1) {}
        virtual ~A() {};
public:
        int a;
        int i;
};

class B :public A {
public:
        B():b(0xb) {}
        virtual ~B() {}
public:
      int b;
};
     

class C :public A {
public:
        C():c(0xc) {}
        virtual ~C() {}
public:
        int c;
};

class D : public B, public C {
public:
        D():d(0xd) {}
        virtual ~D() {}
public:
        int d;
};

 

int main(int argc, char *argv[])
{

    D *d = (D *)new D();

    int *p = (int *)d;
    for(int i=0;i<sizeof(D)/4;i++)
    {
            printf("p=%x,*p=%x/n",(p+i),*(p+i));
    }
    printf("/n");

    // printf("i=%d/n",d->i); // !!! Here d->i cannot be accessed, because "For A::i, the base class A is ambiguous in D.",

                                          // this is why virtual inherit is introduced.

    return EXIT_SUCCESS;
}

原创粉丝点击