C++ Vergleich von Variabeln zweier Objekte?
Hallo Leute. Wie bereits in einer vorherigen Frage soll ein Programm mit C++ geschrieben werden, welches Mithilfe eines vorgegebenen Test-Codes 2 Sparschweine erstellt und mit Funktionen ein paar Sachen anstellt damit...
Jedenfalls soll es eine Funktion (isLighterThan) geben, welche das Gewicht des aktuellen Sparschweins (in dem Fall schwein1) mit dem Gewicht eines übergebenen Sparschweins (schwein2) vergleicht und wenn es leichter ist soll als return Wert true und wenn nicht false zurückgegeben wird.
Zur Info in den Sparschweinen werden auch Münzen hinzugefügt welche etwas wiegen und dieses Gewicht mittels einer Dunktion berechnet wird und in der Variable weight abgespeichert.
Ich hatte bereits eine Idee die in der Funktion in dem Fall von schwein1 mit Char schwein2 übergeben wird und das Gewicht von schwein2 herausfindet und dieses vergleicht. Ich habe aber keinen Plan wie ich das am besten umsetzen könnte. Könnte mir jemand dabei helfen ?
Schönen Abend noch
class PiggyBank(){
int weight;
public:
int isLighterThan(){
}
}
int main(){
PiggyBank schwein1 = PiggyBank(100);
PiggyBank schwein2 = PiggyBank(14);
assert(schwein1.isLighterThan(schwein2)==1);
return 0;
}
3 Antworten
public:
int weight;
int isLighterThan(PiggyBank schwein){
return weight < schwein.weight;
}
... und außerdem sollte der Rückgabewert bool und nicht int sein.
Weiterhin könnte man das PiggyBank-Objekt auch als const& übergeben, aber ich glaube, dass inzwischen der Compiler das schon selber macht.
Da bin ich mir ziemlich sicher, zumal die Funktion ja in der Deklaration schon definiert wurde und somit inline ist.
Vielen Dank.
Jedoch hab ich es so verstanden dass ein if inbegriffen ist in der Funktion weil return keine Zahl in direkter Form sondern nur true oder false im Wert von 0 oder ≠0 übergibt...
Die einfachste Möglichkeit wäre, wenn du einen modernen Compiler nutzt, der C++20 kann, und einfach den sog. "Spaceship-Operator" nutzt, den der Compiler dir freundlicherweise zu 100% automatisch implementiert:
class PiggyBank {
public:
PiggyBank(const int weight) noexcept : weight_ { weight } {}
auto operator <=> (const PiggyBank &) const noexcept = default;
private:
int weight_;
};
Danach kannst du ganz komfortabel folgendes machen:
PiggyBank a { 123 };
PiggyBank b { 456 };
if (a < b) {
cout << "A ist leichter als B" << endl;
}
Viel Spaß! :)
class PiggyBank(){
Die Klammern hinter der Klassendeklaration irritieren mich.
int weight;
Hier bitte vorher protected: hinschreiben, damit das nicht aus Versehen public wird.
public:
int isLighterThan(){
Der Rückgabewert sollte bool sein. Außerdem: Ist leichter als was? Also besser ist LighterThan(const PiggyBank &x). Siehe auch die Hinweise von SuperMenschMann.
}
}
int main(){
PiggyBank schwein1 = PiggyBank(100);
PiggyBank schwein2 = PiggyBank(14);
assert(schwein1.isLighterThan(schwein2)==1);
Das war schon bei Standard-C nicht schön, sich darauf zu verlassen, dass true immer 1 ist (funktioniert aber in der Praxis). true ist alles, was von 0 verschieden ist, aber wie gesagt ist es besser, bool zu verwenden.
return 0;
}
Wir verwenden return als Rückgabewert, der Wert selbst ist natürlich ein Bool. Aber das spielt in diesem Fall eher keine Rolle.
Danke für deine Antwort
Natürlich schlechter Stil. Es sollte einen Getter für weight geben. Weiterhin könnte man das PiggyBank-Objekt auch als const& übergeben, aber ich glaube, dass inzwischen der Compiler das schon selber macht.