webForumDet fria alternativet

krångel med arv

4 svar · 398 visningar · startad av peterbladh

peterbladhMedlem sedan juni 2000277 inlägg
#1

Hej,
jag har ett problem:
Jag har skapat en class, Bas, som har ett antal attribut , sedan har jag en annan class, C2, som ärver Bas. C2 har ytterligare några attribut (allting är public).
När jag sedan instansierar C2 i main kommer jag åt allt som skall kommas åt (allt är frid o fröjd!:), men om jag först gör en array av Bas:
Bas *b[5];
och sedan dynamiskt skapar en instans till C2:
b[0]=new C2(bla bla);
detta fungerar fint, MEN jag kommer sedan inte åt attributen i C2. Jag får ett felmeddelande att attributet inte finns i klassen Bas.

Vad gör jag för fel? Eller kan man inte göra på detta vis?

Tacksam för hjälp!

------------------
/peterbladh

[Redigerat av peterbladh den 18 jan 2001]

D3VaST8DMedlem sedan dec. 2000485 inlägg
#2

Förstår jag dig rätt försöker du du att få en förälder att ärva ett barns alla attribut.
No can do...
De attribut som du kan använda är endast de som är definerade i Bas,
Bas *b[5]; kan inte få de utökade attributen i C2

[Redigerat av D3VaST8D den 18 jan 2001]

peterbladhMedlem sedan juni 2000277 inlägg
#3

Hej

Hur stor poäng är det då med den här typen av initierng?
b[0]=new C2(bla bla);

Har man en virtuell funktion i basklassen, som man sedan omdefenierar (eller vad man skall kalla det) i subklassen så får man ju ut den senare om man skriver
b[0]->virtuell_funktion()

men är det verkligen den enda poängen?

------------------
/peterbladh

[Redigerat av peterbladh den 18 jan 2001]

[Redigerat av peterbladh den 18 jan 2001]

D3VaST8DMedlem sedan dec. 2000485 inlägg
#4

Jo men med
b[0]=new C2(bla bla);
tilldelar du ju de attribut (bla bla) som finns i C2 men kanske inte finns i Bas.
"... MEN jag kommer sedan inte åt attributen i C2. Jag får ett felmeddelande att attributet inte finns i klassen Bas."

Vanligtvis skapar man en virtuell funktion i en bas klass med 2 underklasser som liknar varandra. Exv en bas klass som tar hand om en Figur, underklasser kan då vara fyrhörning och cirkel. Då kan en virtuell funktion tex räkna ut arean av underklassens objekt.

exv
class Figure
{public:
virtual double area(void) = 0;
......};

class recatngle : public Figure
{private: ......;
public: double area (void) {return length * width;}
......};

class circle : public Figure
{private: ......;
public: double area (void) {return pi * radius * radius;}
......};

[Redigerat av D3VaST8D den 18 jan 2001]

[Redigerat av D3VaST8D den 18 jan 2001]

peterbladhMedlem sedan juni 2000277 inlägg
#5

okej tack,
då var det som jag befarade:)

------------------
/peterbladh

253 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
131 ms — hämta forumlista (db)
120 ms — hämta statistik (db)
131 ms — hämta tråd, inlägg och bilagor (db)