🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #9398

Re: [C++] vraagje ivm overerving en polymorfisme

#9398
From: Oelewapperke
Date: Sun, 28 Apr 2002 22:42
80 lines
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-mail
References: <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/)