Klassendefinition
-
Guten Tag liebe Leute!
Ich stehe bei folgender Aufgabe so richtig auf dem Schlauch und wäre froh wenn mich jemand unterstützen kann:
Folgende Ausdrücke sind in der Main- Funktion gegeben, dazu sollen entsprechend Klassen definiert werden, damit die Übersetzung fehlerfrei läuft:int main(){
A a (1.0); // das leuchtet mir ja noch ein..
B b (a);
a.i = b.f () + a;
b.j = a.g ();
a=-b;
return 0;
}Die Zeilen 2-5 sind für mich ein Rätsel
Danke vorab für Eure Hilfe
-
Das sind alles Grundlagen. Was genau erwartest du jetzt von uns?
-
@Hansi_98 sagte in Klassendefinition:
A a (1.0); // das leuchtet mir ja noch ein..
Du brauchst also eine Klasse
A
, die im Konstruktor einen double-Wert entgegennimmt.B b (a);
Du brauchst also eine Klasse
B
, die im Konstruktor einen A-Wert entgegennimmt.a.i = b.f () + a;
Die Klasse A hat also eine public member Variable i, die Klasse B hat also eine public-Funktion f, die keine Argumente hat und etwas zurückliefert, zu dem man ein A addieren kann.
a=-b;
Es gibt also den unären
operator-
für B. Und dessen Rückgabewert passt in denoperator=
von A rein.Es gibt definitiv mehrere korrekte Lösungen, denn es ist ja nirgends vorgegeben, was für Typen a.i, b.j, b.f() etc jeweils sind. Aber versuch's doch erst mal mit möglichst einfachen Typen wie
int
und werde komplizierter, wenn nötig.
-
@Hansi_98 sagte in Klassendefinition:
A a (1.0); // das leuchtet mir ja noch ein.. B b (a);
Die zweite Zeile ist fast dasselbe wie die erste Zeile, nur dass hier mit einer Variable
a
anstatt mit einem direkten Wert (Literal) initialisiert wird.B
benötigt hier also entweder einen Konstruktor, der einA
entgegennimmt, oder eine Instanz vonA
muss implizit in einen Typen konvertierbar sein, den ein Konstruktor vonB
akzeptiert.a.i = b.f () + a;
Mit dem Punkt
.
(-Operator) greift man auf einen Member zu. Das kann entweder eine Variable (Member-Variable oder data member) oder eine Member-Funktion sein (auch Methode genannt, eher in anderen Sprachen).a.i
scheint hier eine Member-Variable zu sein undb.f
wegen den Klammern eine Member-Funktion. Damit die Addition mita
funktioniert, musst du entweder einenoperator+
definieren, der links den Typen akzeptiert, der vonb.f
zurückgegeben wird und rechts einA
, oder du machstA
implizit konvertierbar in den vonb.f
zurückgegebenen Typen, so dass du von einem bereits vorhandenen +-Operator für Builtin-Typen (wieint
,double
, etc.) profitieren kannst.b.j = a.g ();
Wie die vorherige Zeile, nur ohne +-Operator-Gedöns.
a=-b;
Damit dieser Ausdruck funktioniert, benötigt die Klasse
A
einenoperator-=
, der einB
, oder einen Typen, in denB
implizit konvertierbar ist, entgegennimmt.Ich hab hier ein paar Stichworte gegeben. Lies dich mal ein, wie man das macht - das sollte auf Basis der o.g. Information hinzubekommen sein. Ansonsten frag nochmal nach, wenn du eine konkrete Frage hast
-
@Finnegan sagte in Klassendefinition:
a=-b;
Damit dieser Ausdruck funktioniert, benötigt die Klasse A einen operator-=
Was? Interpretieren neuerdings Compiler
=-
nach-=
um? Solange das nicht der Fall ist, würde ich bei meiner Interpretation bleiben (s.o.).
-
@wob sagte in Klassendefinition:
@Finnegan sagte in Klassendefinition:
a=-b;
Damit dieser Ausdruck funktioniert, benötigt die Klasse A einen operator-=
Was? Interpretieren neuerdings Compiler
=-
nach-=
um? Solange das nicht der Fall ist, würde ich bei meiner Interpretation bleiben (s.o.).Ne. War ne Verpeilung meinerseits. Ein guter Grund mit Leerzeichen nicht zu sehr zu knausern ->
a = -b
-
@Finnegan sagte in Klassendefinition:
Ein guter Grund mit Leerzeichen nicht zu sehr zu knausern
Das kann ich nur unterstützen! Alternativ die Leerzeichen automatisch von einem Code-Formatierer einsetzen lassen.
-
Herzlichen Dank liebe Leute! Ihr habt mir sehr gute Denkanstösse gegeben