🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #9279

Re: C leren voor C++

#9279
From: Nicolas Barbier
Date: Wed, 22 May 2002 08:19
70 lines
2756 bytes
LuWi <no@mail.com> wrote in message news:<5s8tdu8c6coe90esj0lvfuo0m3d0bammnt@4ax.com>...

> Dan moet je mij toch eens uitleggen hoe je polymorfisme en overerving

> doet in c :-)



er is 1 groot probleem (onvolkomenheid?) in C om dit op een perfect
vergelijkbare manier als in C++ te doen, nl: als je een pointer to
<type> hebt, kan je er niet een pointer to <struct containing a member
of type <type>> van maken (zover ik weet gaat dat in ansi C toch niet,
vertel het me als je een manier weet (zonder undefined behaviour plz
:-)).



stel je hebt dus een struct A en een struct B en je wil de situatie
"class B is een afgeleide van class A" nadoen. voor late binding heb
je dan dus een soort pointer nodig waarvan je zowel "pointer to struct
A" als "pointer to struct B" van kan maken. de manier die mij nog het
beste lijkt is om een extra struct te maken:



struct A_en_al_zijn_afgeleiden_gemeenschappelijk {

  void *object;

  struct vtable_voor_A vtable;

};



een aanroep van de "class A"-functie blabla werkt dan als volgt:



AofBpointer->vtable->blabla(AofBpointer/*->object*/, ...);



(AofBpointer is een (struct A_en_al_zijn_afgeleiden_gemeenschappelijk
*))



blabla moet dit dan ofwel naar (struct B *) ofwel naar (struct A *)
casten, afhankelijk van over welk run-time type het hier gaat (en dat
is dus bepaald door de creatie (dmv een "constructor") van het
"object", die de vtable moet initialiseren)



stel je had de pointer-operatie die ik in het begin vermelde dan kan
dit op een veel logischere manier (nl _perfect_ de manier waarop dit
in de meeste compilers bij C++ gebeurt) gekund.



overtuigd dat polymorphisme en evererving mogelijk zijn in C ? :-)



-- 

Nicolas Barbier

de niet-C++-gebruiker :-) (meestal toch niet)
Technical Details
Message-ID: <2289cd62.0205220019.198ef2f8@posting.google.com>
Path: arc1-ca.pugleaf.net!archiver1.google.com!postnews1.google.com!not-for-mail
References: <3CB84721.8A420CAD@pandora.be> <jG%t8.15774$Ze.3708@afrodite.telenet-ops.be> <85661ul9w8.fsf@frit.mine.nu> <5s8tdu8c6coe90esj0lvfuo0m3d0bammnt@4ax.com>

Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit
X-Google-Thread: fcea4,643108e417cc4f0f
X-Google-Attributes: gidfcea4,public
X-Google-ArrivalTime: 2002-05-22 01:19:24 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!postnews1.google.com!not-for-mail
From: brolemail@yahoo.com (Nicolas Barbier)
Newsgroups: be.comp.programming
Subject: Re: C leren voor C++
Date: 22 May 2002 01:19:24 -0700
Organization: http://groups.google.com/
Lines: 70
Message-ID: <2289cd62.0205220019.198ef2f8@posting.google.com>
References: <3CB84721.8A420CAD@pandora.be> <jG%t8.15774$Ze.3708@afrodite.telenet-ops.be> <85661ul9w8.fsf@frit.mine.nu> <5s8tdu8c6coe90esj0lvfuo0m3d0bammnt@4ax.com>
NNTP-Posting-Host: 213.224.83.46
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
X-Trace: posting.google.com 1022055564 13767 127.0.0.1 (22 May 2002 08:19:24 GMT)
X-Complaints-To: groups-abuse@google.com
NNTP-Posting-Date: 22 May 2002 08:19:24 GMT