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