Code umschreiben



  • Hallo,

    Ich möchte gerne ein Java-Code zu C++ umschreiben. Kenne mich aber nicht wirklich aus. Vielleicht kann mir da jemand helfen.

    Besten Dank im Voraus.

    public class Bellen {
    private String geräusch;

    public Bellen(String bellen) {
    this.geräusch = bellen;
    }

    public String getGeräusch() {
    return geräusch;
    }

    public boolean equals(Object bellen) {
    if (bellen instanceof Bellen) {
    Bellen anderesBellen = (Bellen)bellen;
    if (this.geräusch.equalsIgnoreCase(anderesBellen.getGeräusch())) {
    return true;
    }
    }
    return false;
    }
    }



  • Warum zur Hölle willst du diesen Code in C++ umschreiben und vor allem wenn du dich nicht auskennst?
    Was is das überhaupt merkwürdiges? o.O
    naja

    #include <iostream>
    
    std::string toLowerString(std::string);
    
    class Bellen 
      {
      public:
        Bellen(std::string);
        std::string getGeraeusch() const;
        bool operator==(void*) const;
        bool operator==(Bellen*) const;
      private:
        std::string geraeusch;
      };
    
    Bellen::Bellen(std::string bellen)
      {
      geraeusch = bellen;
      }
    
    std::string Bellen::getGeraeusch() const
      {
      return geraeusch;
      }
    
    bool Bellen::operator ==(void*) const
      {
      return false; 
      }
    
    bool Bellen::operator ==(Bellen* bellen) const
      {
      if(geraeusch.compare(toLowerString(bellen->getGeraeusch())))
        return true;
      return false;
      }
    
    std::string toLowerString(std::string string)
      {
      for(unsigned i(0); i < string.length(); i++)
        string[i] = tolower(string[i]);
      return string;
      }
    


  • danke sehr...
    ich brauch es für schule.

    in der schule versucht der professor solche Beispiele zu erklären, versteh sie aber nicht.

    hab noch 4 solche Beispiele zu lösen, aber werde selber versuchen sie zu machen.

    Vielen Dank nochmals.

    lg



  • Ich muss das mal kommentieren...

    JustAnotherNoob schrieb:

    Bellen(std::string);
    

    Besser wäre eine konstante Referenz. In Java werden Strings ja auch nicht bei jeder Übergabe kopiert.

    JustAnotherNoob schrieb:

    std::string getGeraeusch() const;
    

    Dito.

    JustAnotherNoob schrieb:

    bool operator==(void*) const;
    

    Dieser Operator ist grober Unfug.

    JustAnotherNoob schrieb:

    bool operator==(Bellen*) const;
    

    Auch dieser operator wird vermutlich nur selten aufgerufen (wenn, dann unbeabsichtigt 😉 ). Der Zeigervergleich (der die Identität überprüft) ist in C++ (wie in Java) bereits "eingebaut". Der operator== muss auch eine (konstante) Referenz vom Typ Bellen bekommen.

    JustAnotherNoob schrieb:

    Bellen::Bellen(std::string bellen)
      {
      geraeusch = bellen;
      }
    

    Hier vermutlich weniger kritisch, evtl. kennt's Euer Prof auch garnicht, aber man sollte eigentlich über die Initialisierungsliste initialisieren.

    JustAnotherNoob schrieb:

    bool Bellen::operator ==(Bellen* bellen) const
      {
      if(geraeusch.compare(toLowerString(bellen->getGeraeusch())))
        return true;
      return false;
      }
    

    1. Vorsgesichtig! Die Funktion compare gibt kein bool zurück, und der int-Rückgabewert wird hier falsch interpretiert.
    2. Wenn wir schon für unser Objekt die Vergleichssemantik von C++ implementieren, können wir die auch nutzen.
    3. In der Klasse Bellen dürfen wir auf alle Attribute der Klasse Bellen nach belieben ohne Setter und Getter zugreifen.
    4. Der Ignore-Case Vergleich funktioniert nur, wenn das linke Geräusch schon vorher nur Kleinbuchstaben enthielt.

    bool Bellen::operator==(Bellen const& rechts) const
    {
        return (toLowerString(geraeusch) == toLowerString(rechts.geraeusch));
    }
    

    JustAnotherNoob schrieb:

    std::string toLowerString(std::string string)
    

    Auch hier könnte der Übergabeparameter eine konstante Referenz sein. Der Rückgabetyp in diesem Fall allerdings nicht!



  • Nur noch zwei kleine Zusätze:

    LordJaxom schrieb:

    JustAnotherNoob schrieb:

    Bellen::Bellen(std::string bellen)
      {
      geraeusch = bellen;
      }
    

    Hier vermutlich weniger kritisch, evtl. kennt's Euer Prof auch garnicht, aber man sollte eigentlich über die Initialisierungsliste initialisieren.

    + konstante Referenz als Parameter (der Vollständigkeit halber).

    LordJaxom schrieb:

    JustAnotherNoob schrieb:

    std::string toLowerString(std::string string)
    

    Auch hier könnte der Übergabeparameter eine konstante Referenz sein.

    Obwohl es in diesem Fall relativ egal ist. Übernimmt man eine konstante Referenz, muss man drinnen eine lokale String-Variable anlegen (siehe Implementierung) - kopiert wird daher der String so oder so.



  • Besten Dank!

    Habt mir sehr geholfen.

    lg


Anmelden zum Antworten