Article View: be.comp.programming
Article #9398Re: [C++] vraagje ivm overerving en polymorfisme
From: Oelewapperke
Date: Sun, 28 Apr 2002 22:42
Date: Sun, 28 Apr 2002 22:42
80 lines
3488 bytes
3488 bytes
Koen Witters wrote:
> Frederik Himpe wrote:
>> Hallo,
>>
>> Stel dat ik een klasse A heb, en een klasse B en C die publiek zijn
>> afgeleid van A. Ik maak dan bvb. een vector<A>, en stop hierin allemaal
>> objecten van klassen B en C willekeurig door elkaar. Bestaat er dan na
>> het opvullen van die vector nog een mogelijkheid om te zien of een object
>> van die vector nu van klasse B of van klasse C is? Of zal ik ergens in
>> klasse A een datalid moeten zetten dat bijhoudt of het object van B of
>> van C is?
>>
>> Frederik
>
> Wacht... efkes den Bjarne openslagen...
> There are four fundamental solutions to the problem:
> 1. Ensure that only objects of a single type are pointed to
> 2. Place a type field in the base class for the functions to inspect
> 3. Use dynamic_cast
> 4. use virtual functions
>
> Persoonlijk zou ik voor de 2de optie gaan, want ik zou ni weten hoe ge
> via een dynamic_cast het type kunt te weten komen. En die virtual
> functions vind ik ook maar iets voos.
>
> mvg,
> Koen Witters
euhm is nochtans vrij eenvoudig zenne
om het voorbeeld uit te werken :
#include <iostream>
struct A
{
A(string a) : text(a) {};
string text;
}
struct B : public A
{
B(string a) : A(a) {};
string getBtext() { return text; };
};
struct C : public A
{
C(string a) : A(a) {};
string getCtext() { return text; };
};
void main()
{
vector<A *> array;
array.push_back(new B("B1"));
array.push_back(new C("C1"));
array.push_back(new B("B2"));
array.push_back(new B("B3"));
array.push_back(new C("C2"));
array.push_back(new C("C3"));
array.push_back(new C("C4"));
array.push_back(new B("B4"));
array.push_back(new B("B5"));
vector<A *>::iterator i;
for (i=array.begin(); i != array.end(); i++)
{
if (B* b = dynamic_cast<B*>(*i))
{
cout << "we hebben een B ! " << b->getBtext() << endl;
}
if (C* c = dynamic_cast<C*>(*i))
{
cout << "we hebben een C ! " << c->getCtext() << endl;
}
}
};
Technical Details
Message-ID:
<1020033798.728972@seven.kulnet.kuleuven.ac.be>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-01!supernews.com!newsfeed.online.be!newsfeed.vmunix.org!newsfeed.belnet.be!naxos.belnet.be!news.belnet.be!not-for-mailReferences:
<wzSy8.43931$Ze.7164@afrodite.telenet-ops.be> <3CCC65CE.3000003@_pandora_._be>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit X-Google-Thread: fcea4,e1efe537c181c282 X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2002-04-28 15:43:20 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-01!supernews.com!newsfeed.online.be!newsfeed.vmunix.org!newsfeed.belnet.be!naxos.belnet.be!news.belnet.be!not-for-mail From: Oelewapperke <Oelewapperke@wol.be> Newsgroups: be.comp.programming Subject: Re: [C++] vraagje ivm overerving en polymorfisme Date: Mon, 29 Apr 2002 00:42:57 +0200 Organization: The Wacko's Lines: 80 Message-ID: <1020033798.728972@seven.kulnet.kuleuven.ac.be> References: <wzSy8.43931$Ze.7164@afrodite.telenet-ops.be> <3CCC65CE.3000003@_pandora_._be> NNTP-Posting-Host: seven.kulnet.kuleuven.ac.be Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7Bit X-Trace: naxos.belnet.be 1020033799 27058 134.58.127.12 (28 Apr 2002 22:43:19 GMT) X-Complaints-To: abuse@belnet.be NNTP-Posting-Date: Sun, 28 Apr 2002 22:43:19 +0000 (UTC) User-Agent: KNode/0.6.1 Cache-Post-Path: seven.kulnet.kuleuven.ac.be!unknown@oelewapperke.kotnet.org X-Cache: nntpcache 2.4.0b5 (see http://www.nntpcache.org/)