🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: be.comp.programming
6 messages
6 total messages Started by Pieter Tue, 23 Dec 2003 14:56
polymorfisme...
#3440
Author: Pieter
Date: Tue, 23 Dec 2003 14:56
49 lines
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...
#3441
Author: Pieter
Date: Tue, 23 Dec 2003 15:02
5 lines
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...
#3442
Author: Aquila
Date: Tue, 23 Dec 2003 15:35
13 lines
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...
#3287
Author: Elie De Brauwer
Date: Mon, 19 Jan 2004 07:54
68 lines
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...
#3288
Author: Aquila
Date: Mon, 19 Jan 2004 14:03
16 lines
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...
#3289
Author: Tim Van Wassenhove
Date: Mon, 19 Jan 2004 14:31
69 lines
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