webForumDet fria alternativet

Subklasser!!

7 svar · 269 visningar · startad av Mc Fetto

Mc FettoMedlem sedan nov. 20021 920 inlägg
#1

Hej jag har skapat två klasser, en bas (Fordon) och en sub till denne (Personbilar), nu försöker jag göra en klass som ska vara subklass till den första subklassen (Bussar) men jag får det inte riktigt att fungera, så här ser det ut:

Fordon::Fordon(string reg, string fab, int vik):
	regNr(reg), Fabrikat(fab), vikt(vik) {}
Fordon::Fordon() {}

Personbilar::Personbilar(string reg, string fab, int vik, int antP, int eff, int mod, int vol, int langd, int bredd)
	:Fordon(reg, fab, vik), antPaers(antP), effekt(eff), arsModell(mod), tankVolym(vol), langd(langd), bredd(bredd){}
Personbilar::Personbilar() {}

Bussar::Bussar(string reg, string fab, int vik, int antP, int eff, int mod, int vol, int langd, int bredd, bool dubel, string buller)
	:Fordon(reg, fab, vik), Personbilar(antP, eff, mod, vol, langd, bredd), dubel(dubel), buller(buller){}
Bussar::Bussar() {}

Kompilatorn klagar på näst sista raden och då säger den:

error C2511: 'Bussar::Bussar' : overloaded member function 'void (class std::basic_string<char,struct std::char_traits<char
>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int,int,int,int,int,int,int,bool,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)' not fou
nd in 'Bussar'

Någon som vet vad tusan felet är???

Mc FettoMedlem sedan nov. 20021 920 inlägg
#2

En sak man kan göra är att om man deklarerar någon som string så behöver man väl inte tro att det är en int sedan va? ;) Tog bara en halvtimma att hitta skitfelet, så nu är ovanstående fråga löst :)

PeWMedlem sedan juni 20006 839 inlägg
#3

  :)

Mc FettoMedlem sedan nov. 20021 920 inlägg
#4

PeW, du sade innan till mig att det är bättre att klasserna själva inte tar reda på datan till dess atribut, utan istället fixar det genom konstruktorer... Det funkar ju bra men, i mainprogrammet blir det väldigt mycket kod. Har du eller någon annan funderingar om hur man kan lösa det så man slipper det!?

PeWMedlem sedan juni 20006 839 inlägg
#5

Det är en avvägning, med tanke på ansvarsfördelningen. Vet inte riktigt vad du menar med att det blir mycket kod i main.. men ivf är det bättre att endera main eller en annan funktion sköter inhämtandet av uppgifterna och initiering av objektet än att objektet självt gör det.
Förstår att det kan vara lockande att låta klasserna göra det mesta när man bygger smått. Men tänk om du ist har massor av subklasser och en mer avancerad struktur och kanske ska ändra nåt fundamentalt. Isf blir det till att hacka i alla objekt ist för endast vid den centrala mainfunktionen. Vidare är det mer naturligt att ett objekt matas med initierande data när det skapas (med konstruktorn) än att det sker i efterhand.

Var förut med i en diskussion om nån array av böcker. Där ville man först skapa en massa tomma böcker för att sen fylla dem med info... inte så bra lösning och inte särskilt objektsmässigt. Samma resonemang är applicerbart här ;)

Som sagt. Det kanske är svårt att se poängen med detta om man endast har en subklass och en typ av inmatning, men ju mer du bygger OOP så kommer du förstå varför det är bra att hålla på vissa "regler". Det finns massor med böcker i ämnet och en bra C++ bok bör ta upp dessa saker på den grundläggande nivån. Sen inbjuder nästan C++ till saker som direkt strider mot OO-"lagarna" (tänker närmast på friendfunktioners access till privat data), men det är en annan historia ;)

Mc FettoMedlem sedan nov. 20021 920 inlägg
#6

Visa ord från en vis man :D, tack för all hjälp.

PeW skrev:

Var förut med i en diskussion om nån array av böcker. Där ville man först skapa en massa tomma böcker för att sen fylla dem med info... inte så bra lösning och inte särskilt objektsmässigt. Samma resonemang är applicerbart här ;)

Känner jag igen liiiite grann :r

PeWMedlem sedan juni 20006 839 inlägg
#7

Ah! Inte tusan kom jag ihåg att det var du.. :e

http://www.webforum.nu/showthread.php?s=&postid=600150#post600150

Sorry..

Men faktum är att detta är en av de vanliga stötestenarna, innan man börjar tänka OO så du är i gott sällskap ;)

Mc FettoMedlem sedan nov. 20021 920 inlägg
#8

Tar defenetivt inte illa upp :)..
Skönt att höra att man inte är ensam!

Ha en skön helg!

Genererad på 387 ms · cache AV · v20260730165559-full.f96bc7eb