From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: *** X-Spam-Status: No, score=3.8 required=5.0 tests=BAYES_00,INVALID_MSGID, RATWARE_MS_HASH,RATWARE_OUTLOOK_NONAME autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: fac41,b87849933931bc93 X-Google-Attributes: gidfac41,public X-Google-Thread: 109fba,b87849933931bc93 X-Google-Attributes: gid109fba,public X-Google-Thread: 103376,b87849933931bc93 X-Google-Attributes: gid103376,public X-Google-Thread: 1108a1,b87849933931bc93 X-Google-Attributes: gid1108a1,public X-Google-Thread: f43e6,b87849933931bc93 X-Google-Attributes: gidf43e6,public X-Google-Thread: 114809,b87849933931bc93 X-Google-Attributes: gid114809,public From: "Sam Inala" Subject: Re: What is wrong with OO ? Date: 1997/02/17 Message-ID: <01bc1d22$e144fe60$928d389d@miyu>#1/1 X-Deja-AN: 219466598 References: Organization: Microsoft Newsgroups: comp.lang.c++,comp.lang.smalltalk,comp.lang.eiffel,comp.lang.ada,comp.object,comp.software-eng Date: 1997-02-17T00:00:00+00:00 List-Id: Robert Dewar wrote in article ... > Charles said > < is not virtual, the compiler will just binds a obj.foo() reference to its > obj::foo() counterpart. On the other hand, if a member function is > virtual, then function pointers, like you mentioned above, are used. > Anyway, just a minor detail; they're still just glorified structs. ;)>> > > YOu should better say "typical C++ implementations" rather than C++, I see > nothing in the draft standard that would support your claim that this is > implied by the language definition. Just for clarification: even typical C++ implementations differ from structs containing function pointers. Consider the following: #include struct One { int x; }; struct Two { int x; void foo() {} }; struct Three { int x; virtual void foo() {} }; struct Four { int x; virtual void foo() {} virtual void bar() {} }; int main() { printf( "sizes = %d %d %d %d\n", sizeof( One ), sizeof( Two ), sizeof( Three ), sizeof( Four ) ); return 0; } Output from gcc: sizes = 4 4 8 8 With an implementation of class Four like this: struct Four { int x; void (*foo)(); void (*bar)(); }; ...we would expect the sizeof( Four ) to be 12. Instead, it most likely contains a single pointer to a table of function pointers, which are shared by all the instances of the class: struct Four { void* vtbl; int x; }; (*Four::function[ cMethods ])(...); I only mention this because I perceive people thinking that object instances carry around their own virtual function tables.