C++ Vergleich von Variabeln zweier Objekte?

3 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet
          public:
          int weight;

          int isLighterThan(PiggyBank schwein){
              return weight < schwein.weight;
          }

RFahren922 
Beitragsersteller
 02.11.2021, 22:44

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...

0
SuperMenschMann  02.11.2021, 21:31

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.

2
tunik123  02.11.2021, 21:56
@SuperMenschMann
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.

1

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;
}

RFahren922 
Beitragsersteller
 02.11.2021, 22:41

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

0