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
intund 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
aanstatt mit einem direkten Wert (Literal) initialisiert wird.Bbenötigt hier also entweder einen Konstruktor, der einAentgegennimmt, oder eine Instanz vonAmuss implizit in einen Typen konvertierbar sein, den ein Konstruktor vonBakzeptiert.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.ischeint hier eine Member-Variable zu sein undb.fwegen den Klammern eine Member-Funktion. Damit die Addition mitafunktioniert, musst du entweder einenoperator+definieren, der links den Typen akzeptiert, der vonb.fzurückgegeben wird und rechts einA, oder du machstAimplizit konvertierbar in den vonb.fzurü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
Aeinenoperator-=, der einB, oder einen Typen, in denBimplizit 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
