[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Re: [CPROG] Nedarving



Hej
Jeg vil give Erwin ret i at du nok bør overveje dit design. Hvis du ikke mener at
de afledte klasser skal kunne det base klassen kan, så prøv at stil dig selv
spørgsmålet. "Er den afledte klasse en base klasse". Base klassen skal gerne være
en fællesnævner for de afledte klasser. F.eks din base klasse "Geometry", her ville
det jo være fornuftig at definere to virtuelle metoder: 1. Areal og 2. Omkreds.
Disse to metoder vil være fælles for alle afledte klasser, hvor de implementeres,
da måden det udregnes på er forskelligt.
Du får herved en abstrakt base klasse, hvor der vil ikke opstå instanser af
klassen, men du vil beholde muligheden for at kunne erklære pointere af typen, der
så kan pege på instanser af dine afledte klasser. Og det er først på
kørselstidspunktet det bliver bestemt hvilken metode der anvendes. Det sker ud fra
hvilken afledt klasse instansen er af.
Men hvis du stadig mener, at du har behov for, at de afledte klasser ikke skal
kunne det din base klasse kan, kan du jo arve "privat", istedet for "public".


Okey! Det var et meget kort forsøg på at forklare. Men hvis du er mere forvirret
end hjulpet, vil jeg gerne sende dig et par små noter, på dansk, om arv og
polymorfi i C++




"Martin E. Nielsen" skriver:

> Hejsa,
>
> > >Hvordan tjekker jeg om et objekt er af en given
> > >type?
> > >F.eks. hvis "Geometry" er en klasse hvorfra jeg
> > >har nedarvet både "Circle" og "Square", så er
> > >begge self. af typen Geometry, men hvordan tjekker
> > >jeg om det er det ene eller andet?
> >
> > Det bør du ikke. Hvis du har noget funktionalitet der er forskelligt
> > afhængigt af type, bør det ligge i en virtuel metode i klassen.
> Hmm... Jamen for en cirkel ville det være rart
> hvis den f.eks. kunne aflevere sin radius, medens
> en firkant f.eks. kunne aflevere længden af
> diagonalen. Lidt søgte eksempler, men jeg mener
> ikke at alle nedarvede klasser kun skal kunne det
> som deres super klasse kunne/kræver.
>
> > Men der findes altså en mekanisme for det, RTTI. Jeg har kun 2nd edition af
> > "C++ Programming Language" ved hånden, men den er nok nærmere beskrevet i 3rd
> > edition. Slå op under dynamic_cast, typeinfo, etc. Fx:
> >
> > class B ...;
> > class C : public B ... ;
> >
> > void foo(B *b) {
> >      if (dynamic_cast<C*>(b)) {
> >         // b er ikke bare en B*, men også en C*
> >      }
> > }
> >
> > Men: du bør ikke have behov for det i de fleste tilfælde, tænk lige over dit
> > design een gang til.
> Jeg tænker, jeg tænker... :o)
>
> Mvh,
>  Martin E. Nielsen



 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2005-08-10, 20:08 CEST [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *