[Spiel] Findet die Fehler ...
-
- Vermutlich soll LittleDataClass nur von MyClass instantiiert werden dürfen 2) eine sinnvollere Lösung als die Friend-Geschichte wäre vermutlich, LittleDataClass zur privaten Unterklasse von MyClass zu machen.
3)Das Problem ist, dass der output von showAllCounts(lc1, str2); behauptet, die Anzahl der jeweiligen Zeichen in str2 auszugeben - tatsächlich wird getcounts aber die Anzahl der Zeichen des Strings ausgeben, mit dem der Counter initalisiert wurde, also str1.
- getCounts hätte mit const versehen werden sollen, damit der Aufruf in showAllCounts legal ist und überhaupt kompiliert. Allerdings hätte dann LetterCounter2::getCounts mit konstanten map-methoden umgeschrieben werden müssen:
uInt getCounts(char c) const { map<char, uInt>::const_iterator pos = county.find(c); if (pos == conty.end() ) return 0; else return pos->second; }
einen const_cast auf die map loszulassen oder sie als mutable zu deklarieren wäre unschön bzw. ein Designfehler.
- Andererseits könnte man LetterCounter1::getCounts vereinfachen:
uInt getCounts(char c) const { return std::count(str.begin(), str.end(), c); }
Die Aufgaben sind was nettes zum Frühstück
-
All right
Weiter gehts:
showAllCounts(lc1, str2); wird nun zu showAllCounts(lc1, str1);3.) Was hat der Programmierer sich mit zwei funktional gleichen Klassen erhofft ?
4.) Hat der Programmierer seinen Plan aus 3. erfüllt ?
5.) Wieso ist std::map nicht so schlau und liefert ein Proxy, um so zwischen Lesen und Schreiben zu unterscheiden und um so den Overhead bei const-Methoden zu vemeiden?
-
- weil der standard es nicht erlaubt
- unterschiedliche implementierung für unterschiedliche anforderungen, kurz: optimierung
- ja, die frage ist nur ob sein plan überhaupt sinnvoll war
-
dieses programm:
int main() { // was muss hier rein? }
soll in C wie auch in C++ compilierbar sein, aber sich in C anders verhalten als in C++.
besondere schikane: nur eine zeile und die zeile darf nicht länger als, na sagen wir mal 30 zeichen sein (ausgenommen white spaces).
wem fällt was ein?
-
-fricky- schrieb:
dieses programm:
int main() { // was muss hier rein? }
soll in C wie auch in C++ compilierbar sein, aber sich in C anders verhalten als in C++.
besondere schikane: nur eine zeile und die zeile darf nicht länger als, na sagen wir mal 30 zeichen sein (ausgenommen white spaces).
wem fällt was ein?
int main() { struct s {char c;}; int s; int i = sizeof('6') + sizeof(s); //na, was kommt raus? }
Okay, sind ca. 50 Zeichen plus whitespaces, aber dafür 2 Features die in C udn C++ verschieden sind
-
int main() { volatile int v;int i=v=0; }
-
-fricky- schrieb:
dieses programm...
int main() { return sizeof('x'); }
-
sehr schön^^
pumuckl: zu lang -> disqualifiziert
camper: bronzemedaille -> was machen c und c++ anders dabei?
Jimmy: * WINNER *!!! -> das einzige programm, das alle kriterien erfüllt und das was 'macht', nämlich einen wert zurückgeben.
-
hustbaer schrieb:
- weil der standard es nicht erlaubt
Wieso ? Warum hat man das nicht mit nem Proxy gelöst ? ( Ich weiß die Antwort selbst nicht
)
hustbaer schrieb:
- ja, die frage ist nur ob sein plan überhaupt sinnvoll war
Ne, leider nicht. Er hätte sein Plan nur dann richtig in die Tat umgesetzt, wenn er showAllCounts mit lc2 aufgerufen hätte und für die einzelne Ausgabe lc1 verwendet hätte.
-
KasF schrieb:
hustbaer schrieb:
- weil der standard es nicht erlaubt
Wieso ? Warum hat man das nicht mit nem Proxy gelöst ? ( Ich weiß die Antwort selbst nicht
)
2 Mögliche Gründe:
-
Oversight/fehlender Weitblick (die IMO wahrscheinlichste Variante). Man darf nicht vergessen wie alt der Standard ist. IMO ist es fast schon verwunderlich dass so viele Dinge im Standard halbwegs gut mit "moderner" C++ Programmierung zusammenspielen.
-
Weil die Compiler "damals" noch weit davon weg waren solche proxies so zuverlässig "wegzuoptimieren" dass es "OK" gewesen wäre
BTW: Same shit bei std::basic_string<T>::operator []. Dort verhindert es u.A. auch eine korrekte COW string Implementierung.
hustbaer schrieb:
- ja, die frage ist nur ob sein plan überhaupt sinnvoll war
Ne, leider nicht. Er hätte sein Plan nur dann richtig in die Tat umgesetzt, wenn er showAllCounts mit lc2 aufgerufen hätte und für die einzelne Ausgabe lc1 verwendet hätte.
Achja, die Anwendung dieser Klassen hab ich mir garnicht angesehen. Merkt man wieder dass ich in der Arbeit viel Libraries schreibe, bzw. mir das auch meist mehr Spass macht als irgendwelche "banalen Applikationen"