Du behöver inte deklarera <string> i din header och du ska absolut undvika att använda using namspace i headerfiler. Om du måste använda standardklasser och namnrymder är det bättre att isf skriva: std::string när du använder / deklarerar något därav.
Du behöver inte deklarera destruktorn om du inte gör nåt med den.
Sen kan det vara trevligare att använda initieringslista ist för att bygga på blocket i konstruktorn:
Din kod ett typexempel på hur man skulle kunna använda abstrakta klasser (i detta fall skulle Bike kunna vara det) som du isf skapar med virtual. Då är det lika dynamiskt (och smidigt) som i JAVA att skyffla data med respektive klassers metoder.
Koden jag skrev var inte hela som jag använder, jag glömde kvar inkluderingen bara och jag har lite skoj i destruktorn...
Din kod ett typexempel på hur man skulle kunna använda abstrakta klasser (i detta fall skulle Bike kunna vara det) som du isf skapar med virtual. Då är det lika dynamiskt (och smidigt) som i JAVA att skyffla data med respektive klassers metoder.
Jäpp, det har du helt riktigt i. Det tänkte jag aldrig på.
Varför ska man undvika using namespace i header-filer?
Kan jag deklarera seats som private och ändå kunna hämta från en underklass om jag deklarerar den som public i "ärvningen", som Swey visade? Eller gäller protected? Troligtvis är det väl som i Java, att private endast funkar i den egna klassen, protected fungerar även i subklasser?
Varför ska man undvika using namespace i header-filer?
I ditt fall med "using namespace std" i "min_include.h", kommer inkluderandet av den headerfilen innebära att du applicerar det namespacet på allt som kommer efter "include" i c-filen. I just ditt fall blir det inget problem eftersom du i alla fall hade tänkt använda det namespacet. Men rent allmänt är det ju bra om man på ett enkelt sätt alltid kan se vilket namespace som gäller utan att behöva rota i headerfilerna som man har inkluderat.
Kan jag deklarera seats som private och ändå kunna hämta från en underklass om jag deklarerar den som public i "ärvningen", som Swey visade?
Nej, i regel kan du endast sänka behörigheten.
Public ärver public-medlemmar som public och protected-medlemmar som protected.
Protected ärver public som protected och protected som protected.
Private (om inget anges) ärver public som private och protected som private.
Medlemmar deklarerade som private är alltid oåtkomliga i underklasser.
I .NET kan man endast ärva som public. MFC och VCL använder dessutom endast public-ärvning. De andra metoderna används vad jag vet väldigt sällan.
Att stackallokering är mycket snabbare än heapallokering. Man bör väl tillägga att det kan finnas andra omständigheter som kan motivera heapallokering i en del fall. Så därför går det inte att utan vidare säga vad som är smartast i just ditt fall.
Jag tog mig också friheten att radera ditt svar på ditt eget inlägg.
Bra. Jag blev lite förvånad över en del saker som hände när jag råkade klicka lite fel.
Heap-allokering kan vara bra om du behöver en mer dynamisk minnesallokering. Ett exempel är om du har en länkad lista. Då behöver inte programmet veta i förväg hur mycket som ska allokeras. Programmet kan under körningens gång allokera element efter element i den länkade listan.
Lite fel? Du måste ja klickat fel minst två gånger.
Tack för svaret ivf, det skulle jag ju hur lätt som helst kunnat gissa mig till om jag hade tänkt lite!
PeW pratade lite om abstrakta klasser, och jag undrar nu hur jag skapar dem... Det enda vettiga jag har hittat är att man använder nyckelordet virtual på en del metoder ( Alla metoder? ) - stämmer det?
Nyckelordet "virtual" kommer väl till pass för abstrakta klasser. Du deklarerar en metod som:
virtual int GetSeats() = 0;
Observera "= 0" på slutet. Det räcker med att en av metoderna är deklarerad så, så är klassen abstrakt. Be mig inte förklara logiken bakom detta Själv hade jag föredragit att man hade haft ett nyckelord typ "abstract" för att deklarera klassen. Nåja, man kan ju inte alltid få som man vill
Betyder att funktionen är "pure virtual". Dvs. den har ingen implementering i den klass den tillhör och du kan således inte instansiera klassen just för att den blir abstrakt.
Det är upp till underklasserna att implementera gurka.
Kan jämföras med javas interface.
399 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a