See the result of a3->a3();

#include <stdio.h>
#include <iostream>

class A1
{
  private:
    char data[100];
  public:
    virtual void a1()=0;
};
class A2
{
  private:
    char data[33];
  public:
    virtual void a2()=0;
};
class A3
{
  private:
    char data[10];
  public:
    virtual void a3()=0;
};
class B: public A1, public A2
{
  private:
    char data[100];
  public:
    virtual void a1(){ std::cout<<"B:A1"<<std::endl;}
    virtual void a2(){ std::cout<<"B:A2"<<std::endl;}
    virtual void a3(){ std::cout<<"B:A3"<<std::endl;}
};

int main()
{
  B *b=new B();

  A1 *a1=(A1 *)b;
  A2 *a2=(A2 *)b;
  A3 *a3=(A3 *)b;

  printf("b=%p, a1=%p, a2=%p, a3=%p\n", b, a1, a2, a3);
  a1->a1();
  a2->a2();
  a3->a3();

  return 0;
}


[EMAIL PROTECTED] multid]# ./a.out
b=0x8049290, a1=0x8049290, a2=0x80492f8, a3=0x8049290
B:A1
B:A2
B:A1


-- 
           Summary: g++ compiling virtual method
           Product: gcc
           Version: 3.4.6
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: zlupin at 21cn dot com


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36563

Reply via email to