Frage zu Klasse
-
Wenn ich eine Klasse erstellen muss ich dann in die geschweifte Klammer z.B. {a=A} schreiben. Welchen Zweck erfüllt das?
class Rechteck { public: Rechteck(int A=1;){A=a} };Danke
-
Hallo
Wenn ich eine Klasse erstellen muss ich dann in die geschweifte Klammer z.B. {a=A} schreiben.
Muß? Warum?
In deinem Fall wird es einen Compiler-Fehler geben, denn das Symbol "a" ist unbekannt. Vermutlich meinst du es so
class Rechteck { public: Rechteck(int A=1;){a=A} int a; };Dann wird der Membervariable a der Wert des Konstruktorparameters A zugewiesen. Wenn das nicht gemacht würde, würde a unitialisiert bleiben und der Wert von A einfach "verschwinden".
Das ganze würde sich natürlich auch mit einer Initialisierungsliste eleganter lösen.bis bald
akari
-
Nein das ist Schwachsinn. (edit: bezieht sich nicht auf akari)
Also ... normal hast du einen defaultconstructor ... wenn du dann über den Konstruktor schon irgendwas machen willst wie bsw bestimmte Variablen mit Werten zu initialisieren, dann kannst du dir nen eigenen Konstruktor anlegen:
class MyClass { public: MyClass(const std::size_t&); ~MyClass(); public: void show_data() const; private: std::size_t m_data; };MyClass::MyClass(const std::size_t& data) : /* */ m_data(data) /* Das ist eine Initialisierungsliste*/ { } MyClass::~MyClass() { } void MyClass::show_data() const { std::cout << m_data << std::endl; }int main() { MyClass inst(10); inst.show_data(); }...
-
OK. Vielen Dank. Wenn ich jetzt nichts in der geschweiften Klammer stehen habe wo {A=a} steht. Kann ich die geschweifte Klammer dann auch weg lassen?
Danke
-
ähm, leute, das ist doch sowieso falsch "a=A" ist nähmlich keine gültige anweisung, ob mit klammer oder nicht... es muss erstens "a=A;" heissen, und zweitens _muss_ da die geschweifte klammer hin, weil ansonsten der compiler meckert, weil du die funktion nur deklarierst ohne die zu definieren...
-
Hi...
das was du machst ist die Memberfunktion inline zu definieren.
Das macht man normalerweise wenn der Code, den die Funktion ausführt ziemlich kurz ist. Geht übrigens auch bei normalen Funktionen ohne Klasse indem du sie als inline deklarierst.
Wenn du das nicht machen willst, kannste es auch so machen wie (D)Evil geschrieben hat und deinen Konstruktor oder jede andere Memberfunktion extra definieren. Dann musste natürlich die Klammern in der Deklaration weglassen.