Avatar billede mikkel_sommer Nybegynder
21. maj 2004 - 19:50 Der er 8 kommentarer og
1 løsning

Grundlæggende nedarvning og polyformi

Jeg har følgende klasser:
en abstrakt superklasse (Person(cprNr))
og to subklasser(Medarbejder(ansatDen) og Kunde(kundeNr)).

Person klassen har så en virtual getCprNr metode som begge subklasser hverisær definerer. De to subklasser har derudover, get metoder til ansatDen og kundeNr.

Hvis jeg så i main opretter et objekt med:

          Person *p;
          p = new Medarbejder(1,1);

kan jeg ikke umiddelbart via p-> få fat i getAnsatDen metoden
i medarbejder klassen.

Er det mig der er helt galt på den eller hvad sker der, håber nogen kan hjælpe.

PS. Det haster lidt, derfor det høje antal points.
Avatar billede erikjacobsen Ekspert
21. maj 2004 - 19:55 #1
Din p er en Person, som sikkert ikke har en getAnsatDen-funktion. Hvad med
at erklære p som en Medarbejder?
Avatar billede arne_v Ekspert
21. maj 2004 - 19:58 #2
Selvfølgelig.

Person *p = new Medarbejder(1,1);

betyder:

jeg laver en medarbejde, men vil kun betragte ham som en Person.

Da Person ikke har en getAnsatDen så kan du ikke kalde metoden.

Medarbejder *m = new Medarbejder(1,1)

kan godt.

Hvis du er villig til at grise lidt kan du bruge:

Person *p = new Medarbejder(1,1);

og

((Medarbejder *)p)->getAnsatDen
Avatar billede mikkel_sommer Nybegynder
21. maj 2004 - 21:05 #3
Men hvordan får jeg så fat i superklassens viratuelle metoder som er difineret i subklasserne?
Avatar billede arne_v Ekspert
21. maj 2004 - 21:07 #4
Medarbejder *m = new Medarbejder(1,1);
m->getCprNr

virker fint
Avatar billede arne_v Ekspert
21. maj 2004 - 21:09 #5
samme med:

Person *p = new Medarbejder(1,1);
p->getCprNr

Person *p = new Medarbejder(1,1);
((Medarbejder *)p)->getCprNr

Det er kun metoder der er specifikke for sub klassen der kan give "problemer"
Avatar billede erikjacobsen Ekspert
21. maj 2004 - 21:12 #6
Hvordan har du defineret getAnsatDen i Medarbejder og i Person?
Vis os det.
Avatar billede arne_v Ekspert
21. maj 2004 - 21:23 #7
Noget helt urelateret til dit spørgsmål, så er jeg ikke sikker på at
dit klasse hiraki er optimalt. Jeg ville nok lade Medarbejde og kunde
indeholde en Person i.s.f. at arve fra den. Fordi hvad nu hvis du ansætter
en kunde ?
Avatar billede mikkel_sommer Nybegynder
22. maj 2004 - 23:06 #8
Ja du har helt ret arne v, det var et hurtigt sammenstrikket eksempel. For at slippe for at skrive et meget langt indlæg. Men jeg fik fat i meningen, mange tak for hjælpen.
Avatar billede arne_v Ekspert
23. maj 2004 - 00:04 #9
OK at vi ligger et svar så
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester