Toon posts:

[c++] Inheritance

Pagina: 1
Acties:
  • 43 views sinds 30-01-2008

Verwijderd

Topicstarter
Ik ben bezig met een opdracht over inheritence. Alleen ik maak nu een domme fout denk ik.

Ik heb een dierentuin met daarin een map met werknemers map. Daar gooi ik oppasser, administrateurs en managers in, die geerft hebben van werknemer. Kan dat of moet ik voor elk een aparte map gebruiken? Want ik krijg nu het probleem als ik in de map van werknemers bij iedereen 'getSalaris()' opvraag, die dus in elke soort werknemer staat en bij elk de verschillende salarissen teruggeeft, dat hij dus 'getSalaris' in werknemer probeert te vinden...waar hij dus niet is.

Hoe moet ik dit nu aanpakken? Moet ik dynamic_cast gebruiken misschien en hoe dan?

Hieronder wat files

Alvast bedankt

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
// Oppasser.h

#ifndef OPPASSER_H
#define OPPASSER_H

#include <string>
#include <iostream>
#include "Werknemer.h"
#include "Kooi.h"
#include "Dier.h"

using namespace std;

class Oppasser : public Werknemer {
private:
    Kooi * kooi;
public:
    Oppasser(int, string, int, Kooi*);
    int getSalaris();
};

#endif OPPASSER_H

// Oppasser.cc

#include "Oppasser.h"


Oppasser::Oppasser(int nummer, string naam, int leeftijd, Kooi * kooi) : Werknemer(nummer, naam, leeftijd) {
    this->kooi = kooi;
}

int Oppasser::getSalaris(){
    return (20000 + (kooi->aantalDieren() * 1000));
}

// Dierentuin.cc

#include <assert.h>
#include "Dierentuin.h"
#include "Dier.h"
#include "Werknemer.h"
#include "Administrateur.h"
#include "Oppasser.h"
#include "Manager.h"

Dierentuin::Dierentuin(string naam) { 
    beschikbareDierNummers = new vector<int>; 
    beschikbareWerknemerNummers = new vector<int>; 
    dieren = new map<int, Dier *>; 
    kooien = new map<string, Kooi *>; 
    werknemers = new map<int, Werknemer *>; 
} 

-----------------------------
stukje overgeslagen
-----------------------------

int Dierentuin::getSalarisPost(){
    int totaal;

    for(map<int, Werknemer *>::iterator iter = werknemers->begin();
    iter != werknemers->end(); ++iter){
        //hioer vroeg ik dus getSalaris();
    }
    return totaal;
}


.modbreak: Codetags toegevoegd, denk daar voortaan zelf aan!

[ Voor 10% gewijzigd door .oisyn op 28-10-2003 22:25 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
Dat kan.

Echter, je zult van getSalaris een virtuele functie (eventueel een pure virtuele [=abstracte]) moeten maken, die je dan in de classes 'oppasser', 'adminstr', ... overrided.

Voor meer info kan je misschien eens iets zoeken over polymorphisme.

[ Voor 25% gewijzigd door whoami op 28-10-2003 22:24 ]

https://fgheysels.github.io/


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

Dat is idd op te lossen met virtual. Het is echter een heel basic C++ probleem, wat je makkelijk zelf op zou moeten kunnen lossen. Koop bijvoorbeeld een boek, of lees een aantal tutorials door.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Dit topic is gesloten.