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