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