Thread View: be.comp.programming
6 messages
6 total messages
Started by Pieter
Tue, 23 Dec 2003 14:56
polymorfisme...
Author: Pieter
Date: Tue, 23 Dec 2003 14:56
Date: Tue, 23 Dec 2003 14:56
49 lines
2182 bytes
2182 bytes
Hallo,
Situatieschets:
basisklasse : Personeelslid
class Personeelslid {
private:
string naam;
public :
Personeeslid(string);
void GeefNaam(string);
virtual double BepaalLoon();
//********
afgeleide klassen: Manager , Verkoper
//een Manager wordt per uur betaald,
//een Verkoper krijgt een vast bedrag + een commissie
class Manager : public Personeelslid {
private:
int uren;
public:
Manager(string);
void RegistreerAantalUren(int); // <-----
virtual double BepaalLoon();
Bon,
Alle aangemaakte managers en verkopers worden toegevoegd aan een
map<int,PersoneelsLid> ipMap; in een algemene, andere klasse.
Als ik deze map overloop, Hoe kan ik dan (als de iterator een manager object
aanduidt) RegistreerAantalUren(int); aanroepen??
RTTI lukt niet direct, maar het moet via polymorfisme ook lukken.
Alleen weet ik niet exact hoe.
mogelijke oplossing (?):
RegistreerAantalUren(int); ook virtual maken in Personeelslid, en enkel een
implementatie bij Manager?
Geprobeerd, maar de constructor van Personeelslid wordt dan aangeroepen..
Hints, tips??
Mvg,
Pieter
Re: polymorfisme...
Author: Pieter
Date: Tue, 23 Dec 2003 15:02
Date: Tue, 23 Dec 2003 15:02
5 lines
1263 bytes
1263 bytes
> Geprobeerd, maar de constructor van Personeelslid wordt dan aangeroepen..
typo: niet de constructor van Personeelslid maar wel:
void PersoneelsLid::RegistreerUren(int u) { cout << " vanuit personeelslid,
nie goe";}
wordt aangeroepen..
Re: polymorfisme...
Author: Aquila
Date: Tue, 23 Dec 2003 15:35
Date: Tue, 23 Dec 2003 15:35
13 lines
1499 bytes
1499 bytes
Pieter wrote: > Alle aangemaakte managers en verkopers worden toegevoegd aan een > map<int,PersoneelsLid> ipMap; in een algemene, andere klasse. > Je bent in C++ bezig, daar moet je om polymorfisme te laten werken pointers gebruiken, dus stop pointers naar die PersoneelsLeden in die map en het zou moeten werken. (Of alvast het zou kunnen werken, zelf niet getest.) -- Pleased to meet you Hope you guess my name But what's puzzling you Is the nature of my game
Re: polymorfisme...
Author: Elie De Brauwer
Date: Mon, 19 Jan 2004 07:54
Date: Mon, 19 Jan 2004 07:54
68 lines
2811 bytes
2811 bytes
Stel, in elke klasse voeg je een enum TYPE die aangeeft om welk type
persoon het juist gaat. Verder voeg je een lidfunctie toe die je
geeftype doopt, deze geeft het type terug. In elke constructor zet
je het type goed.
Wanneer je iets uit die map wilt halen kijk je eerst naar het type,
daarrond plaats je een switch case opdracht en aan de hand daarvan bepaal je
naar welk object je moet casten.
(Wel uit het vuistje maar het zou moeten weken)
mvg
Elie De Brauwer
Pieter <pieterdm@hotmail.com> wrote:
> Hallo,
>
> Situatieschets:
>
> basisklasse : Personeelslid
> class Personeelslid {
>
> private:
> string naam;
>
> public :
> Personeeslid(string);
> void GeefNaam(string);
> virtual double BepaalLoon();
>
> //********
> afgeleide klassen: Manager , Verkoper
> //een Manager wordt per uur betaald,
> //een Verkoper krijgt een vast bedrag + een commissie
> class Manager : public Personeelslid {
>
> private:
> int uren;
>
> public:
> Manager(string);
> void RegistreerAantalUren(int); // <-----
> virtual double BepaalLoon();
>
> Bon,
>
> Alle aangemaakte managers en verkopers worden toegevoegd aan een
> map<int,PersoneelsLid> ipMap; in een algemene, andere klasse.
>
> Als ik deze map overloop, Hoe kan ik dan (als de iterator een manager object
> aanduidt) RegistreerAantalUren(int); aanroepen??
>
> RTTI lukt niet direct, maar het moet via polymorfisme ook lukken.
> Alleen weet ik niet exact hoe.
>
> mogelijke oplossing (?):
> RegistreerAantalUren(int); ook virtual maken in Personeelslid, en enkel een
> implementatie bij Manager?
> Geprobeerd, maar de constructor van Personeelslid wordt dan aangeroepen..
>
> Hints, tips??
>
> Mvg,
> Pieter
>
>
>
>
Re: polymorfisme...
Author: Aquila
Date: Mon, 19 Jan 2004 14:03
Date: Mon, 19 Jan 2004 14:03
16 lines
1656 bytes
1656 bytes
Elie De Brauwer <helios@phenix.rootshell.be> wrote: > >Stel, in elke klasse voeg je een enum TYPE die aangeeft om welk type >persoon het juist gaat. Verder voeg je een lidfunctie toe die je >geeftype doopt, deze geeft het type terug. In elke constructor zet >je het type goed. >Wanneer je iets uit die map wilt halen kijk je eerst naar het type, >daarrond plaats je een switch case opdracht en aan de hand daarvan bepaal je >naar welk object je moet casten. >(Wel uit het vuistje maar het zou moeten weken) > Dat is nogal een vies antwoord als de OP polymorfisme wil... -- Aquila "May the source be with you"
Re: polymorfisme...
Author: Tim Van Wassenhove
Date: Mon, 19 Jan 2004 14:31
Date: Mon, 19 Jan 2004 14:31
69 lines
2743 bytes
2743 bytes
On 2004-01-19, Elie De Brauwer <helios@phenix.rootshell.be> wrote:
Quote volgorde hersteld
> Pieter <pieterdm@hotmail.com> wrote:
>> Hallo,
>>
>> Situatieschets:
>>
>> basisklasse : Personeelslid
>> class Personeelslid {
>>
>> private:
>> string naam;
>>
>> public :
>> Personeeslid(string);
>> void GeefNaam(string);
>> virtual double BepaalLoon();
>>
>> //********
>> afgeleide klassen: Manager , Verkoper
>> //een Manager wordt per uur betaald,
>> //een Verkoper krijgt een vast bedrag + een commissie
>> class Manager : public Personeelslid {
>>
>> private:
>> int uren;
>>
>> public:
>> Manager(string);
>> void RegistreerAantalUren(int); // <-----
>> virtual double BepaalLoon();
>>
>> Bon,
>>
>> Alle aangemaakte managers en verkopers worden toegevoegd aan een
>> map<int,PersoneelsLid> ipMap; in een algemene, andere klasse.
>>
>> Als ik deze map overloop, Hoe kan ik dan (als de iterator een manager object
>> aanduidt) RegistreerAantalUren(int); aanroepen??
>>
>> RTTI lukt niet direct, maar het moet via polymorfisme ook lukken.
>> Alleen weet ik niet exact hoe.
>>
>> mogelijke oplossing (?):
>> RegistreerAantalUren(int); ook virtual maken in Personeelslid, en enkel een
>> implementatie bij Manager?
>> Geprobeerd, maar de constructor van Personeelslid wordt dan aangeroepen..
> Stel, in elke klasse voeg je een enum TYPE die aangeeft om welk type
> persoon het juist gaat. Verder voeg je een lidfunctie toe die je
> geeftype doopt, deze geeft het type terug. In elke constructor zet
> je het type goed.
> Wanneer je iets uit die map wilt halen kijk je eerst naar het type,
> daarrond plaats je een switch case opdracht en aan de hand daarvan
> bepaal je
> naar welk object je moet casten.
> (Wel uit het vuistje maar het zou moeten weken)
Wel een heel erg "vuile" oplossing.
Als de OP gewoon dat object downcast kan hij wel de betreffende methode
oproepen.
--
http://home.mysth.be/~timvw
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads