Veerbung: Überschreiben von Konstruktoren - Verständnisproblem
-
Du hast mitten in der Initialisierungsliste ein
{;}. Member werden dort aber durch ein Komma getrennt.
-
Herzlichen Dank

-
Noch was als Anmerkung: Ich würde Parameter von Memberfunktionen nicht gleich wie Membervariablen benennen. Zudem sollte man Klassentypen wie
std::stringgrundsätzlich als Const-Referenz anstatt als Kopie übergeben.
-
Das hier sieht auch gefährlich aus.
_class(_class)Also der Unterstrich am Anfang des Bezeichners. Der könnte bereits von der Implementierung besetzt sein. (Was bei class nicht einmal unwahrscheinlich ist).
-
class Person { public: Person(string name, int age); void info() const; std::string GetName() const {return name;} private: string name; int age; }; class Pupil: public Person { public: Pupil(string name, int age, string _class); void info() const; std::string GetName2() const {return name;} private: string name; //hast du scho int age; //hast du schon string _class; };int main() { Pupil *ppl = new Pupil("Horst", 16, 4); // ^^ std::cout << ppl->GetName() << " != " << ppl->GetName2() << std::endl; delete ppl; system ("pause"); //siehe consolen faq, warum man das eigtl nich macht, sondern anders - und wie ^^ }Wie du siehst, hab ich mal 2 Fkt geschrieben und dir nen kleines Beispiel gepostet - sollte eigtl rel. schnell klar werden, was ich dir damit sagen möchte ^^
bb
edit:
drakon schrieb:
Das hier sieht auch gefährlich aus.
_class(_class)Also der Unterstrich am Anfang des Bezeichners. Der könnte bereits von der Implementierung besetzt sein. (Was bei class nicht einmal unwahrscheinlich ist).
glaub ich nicht dran...
imho ist nur folgendes reserviert:__x //2 unterstriche - egal, was folgt _A // 1 unterstrich und ein großbuchstabeaber ich hätte den member so und so class genannt - wieso dort nen unterstrich davor und bei dem rest aber nicht? Oo
ich regel das eigtl immer so, dass variablenamen klein sind und übergebene namen (wie bei ctor oder settern) kann ich dann einfach mit Unterstrich (_varname und dann varname = _varname) schreiben...2.edit: delete hinzugefügt ^^
bb
-
17.4.3.1.2 schrieb:
— Each name that begins with an underscore is reserved to the implementation for use as a name in the
global namespace.165)
-
drakon schrieb:
17.4.3.1.2 schrieb:
— Each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace.165)
"For use as a name": Heißt das nicht, dass bei einer Namensauflösung dem lokalen Bezeichner Vorrang gewährt würde und die Regel hier deshalb gar nicht in's Gewicht fällt?
-
Nexus schrieb:
Zudem sollte man Klassentypen wie
std::stringgrundsätzlich als Const-Referenz anstatt als Kopie übergeben.Öh... das verstehe ich (noch) nicht. Code wäre nett

unskilled schrieb:
aber ich hätte den member so und so class genannt - wieso dort nen unterstrich davor und bei dem rest aber nicht? Oo
Möglicherweise, weil `class` ein reserviertes Keyword ist?!
@_unterstrichschreibweise: Werd dann halt class_ nehmen

-
Mir fällt gerade auf: Vergiss den Satz von wegen: lass den unterstrich vor class beim member weg - wie verplant kann man eigtl sein -.-'
Auch, wenn es nicht schlimm ist, die übergebene variable gleich zu benennen, wie nen member - ich mags nicht - muss man eben hinten noch nen unterstrich machen...Naja - b2t:
Das spielt aber keine Rolle!?int _class = 123; // class abc { int _class; public: abc (int _class_) : _class (_class_) {} };Egal, ob da iwas im globalen Namespace ist - lediglich Makros werden doof:
16.8.4 schrieb:
Any other predefined macro names shall begin with a leading underscore followed by an uppercase letter or a second underscore.
17.6.4.3.3 schrieb:
Each name that contains a double underscore _ _ or begins with an underscore followed by an uppercase letter (2.11) is reserved to the implementation for any use.
bb
-
Wenn schon, dann nimm
Classoder ein ausführlicherer Bezeichner, Unterstriche am Anfang sind nicht nötig.Eine Const-Referenz-Übergabe sieht so aus:
Pupil(const string& Name, int Age, const string& Class);