Gruselige Programmierbeispiele auf Wikipedia
-
TyRoXx schrieb:
explicit
gehört zu so einem Konstruktor.explicit
gehört für mich vor jeden Ctor, egal wie viel Parameter er nimmt.
(Und das meine ich ernst)
-
hustbaer schrieb:
explicit
gehört für mich vor jeden Ctor, egal wie viel Parameter er nimmt.Koenntest du bitte kurz erklaren warum? Bei einem Parameter ist es mir klar sowie bei Konstruktoren mit mehreren Parametern mit Default-Values. Aber warum immer?
-
u.A. deswegen:
// Version 1 class Foo { public: Foo(int shoeSize, int legCount); };
Commit: "added default value (most people have 2 legs)"
// Version 1 class Foo { public: Foo(int shoeSize, int legCount = 2); };
BAM
Und weil es schöner "aligned" wenn man mehrere Konstuktoren hat
EDIT: Tippfehler korrigiert
-
hustbaer schrieb:
Und weil es schöner "aligned" wenn man mehrere Konstuktoren hat
#define constructor explicit
So, jetzt aligned es noch viel hübscher.
class Foe { public: constructor Foe(int showSize, int legCount); constructor Foe(Foo theOtherFoe); };
-
In der objektorientierten Programmierung ist die Aggregation eine besondere Art der Assoziation zwischen Objekten. Sie beschreibt eine stärkere Beziehung zwischen Objekten als die allgemeine Assoziation - denn bei der Aggregation sind die assoziierten Objekte nicht mehr gleichwertig, sondern ein Objekt „ist Teil von“ einem anderen Objekt. Im Gegensatz zur Komposition (die auch eine „ist Teil von“ Assoziation beschreibt) kann das Teil-Objekt ohne das Aggregat-Objekt existieren. In der UML wird die Aggregation durch eine leere Raute, die Komposition durch eine ausgefüllte Raute symbolisiert.
Findet ihr den Text dazu nicht auch schlecht? Wenn man da nicht weiß, was Aggregation ist, weiß man es nachher auch nicht.
-
nochwas schrieb:
...
Findet ihr den Text dazu nicht auch schlecht? Wenn man da nicht weiß, was Aggregation ist, weiß man es nachher auch nicht.
Das ist das Problem mit UML. Man versucht es intuitiv auf eine konkrete Programmiersprache abzubilden und eckt dabei ständig an.
-
"Umlaut in Bezeichner"
Ernsthaft? Wir sind in 2012, nutz Unicode für deine Dateien und einen modernen Compiler. Wir leben nicht alle mehr in der C-Ära, bei der Umlaute etc. nicht verwendet werden können!
-
Keine Ahnung, ob das auf einem deutschen System funktioniert. Aber meinen Code sollen auch Japaner kompilieren können.
-
Wer programmiert den bitte mit Umlauten?
-
Der Portugiese, der eine Variable "Jahre" nennen wollte, aber ohne die Tilde "Anus" bekam :p
-
Hallo.
Die Wikipedia wird von Lehrern geschrieben, deshalb ist die schlechte Qualität kein Wunder.
-
Warum entsteht hier eigentlich bei all dem Unmut, den man so mitliest, kein Projekt, das es sich zum Ziel setzt, die Wikipedia mit perfektem C++ zu überziehen?
-
Decimad schrieb:
Warum entsteht hier eigentlich bei all dem Unmut, den man so mitliest, kein Projekt, das es sich zum Ziel setzt, die Wikipedia mit perfektem C++ zu überziehen?
Weil Wikipedia dann total unbrauchbar wäre.
-
Wohl eher weil es Wölfe gibt, die eigene Fehler nicht einsehen und ihre Freizeit in diversen Editwars verbringen.
-
Ich vermute ja eher, es liegt daran, dass die ganzen Basher befürchten, dann von ihren Basher-Kollegen gebasht zu werden, weil sie auf einmal auch irgendwas nicht bedacht haben. Happy bashing!
-
Decimad schrieb:
Warum entsteht hier eigentlich bei all dem Unmut, den man so mitliest, kein Projekt, das es sich zum Ziel setzt, die Wikipedia mit perfektem C++ zu überziehen?
Schau den Code bei den Algos aus Informatik und Mathematik an. Da ist er doch ok. Manchmal muß man auf den englischen Text wechseln, das merkt man dann aber auch ganz schnell.
Aus schlechtem Plan erwächst kein guter Code. Das Problem vorher ist UML. Die Beispiele werden immer weh tun.
-
nochwas schrieb:
In der objektorientierten Programmierung ist die Aggregation eine besondere Art der Assoziation zwischen Objekten. Sie beschreibt eine stärkere Beziehung zwischen Objekten als die allgemeine Assoziation - denn bei der Aggregation sind die assoziierten Objekte nicht mehr gleichwertig, sondern ein Objekt „ist Teil von“ einem anderen Objekt. Im Gegensatz zur Komposition (die auch eine „ist Teil von“ Assoziation beschreibt) kann das Teil-Objekt ohne das Aggregat-Objekt existieren. In der UML wird die Aggregation durch eine leere Raute, die Komposition durch eine ausgefüllte Raute symbolisiert.
Findet ihr den Text dazu nicht auch schlecht? Wenn man da nicht weiß, was Aggregation ist, weiß man es nachher auch nicht.
Der Text ist schon kacke, das stimmt. Ich hätte das in den C++-Beispiel auch eher deutlicher erklärt:
Bei der Aggregation hätte ich die Pointer verwendet, da bei einer Zerstörung von "ehe" (:D ) ja beide Partner noch als Objekte weiterleben.
Beim Bauwerk hätte ich hingegen lokale Instanzen (meinetwegen im Vektor) verwendet. Wenn das Bauwerk zerstört wird, werden so auch automatisch die Stockwerke gelöscht. "they live and die with it" war ja immer das Merkmal der Komposition.
Viele Richter, viele Urteile.
-
Hi,
TyRoXx schrieb:
* sinnloser Standardkonstruktor
ist mit Sicherheit nicht sinnlos. ein privarer Standardkonstruktor verhindert, dass der Compiler mal fix einen erstellt und damit etwas generiert was Schwachsinn ist. (hat vermutlich mal Scott Meyers gelesen)
Allerdings braucht da nichts drin zu stehen. Es sei denne, man wollte ihn innerhalb der Klasse aufrufbar machen und nutzen.
Eigentlilch sollte man (aus meiner Sicht) immer einen privaten Konsturktor, privaten Kopierkonstruktor und privaten Zuweisungsoperator schreiben, wenn man nicht garantieren kann dass durch den Compiler erzeugte richtig funktionieren. Da riecht schon ein einziger zeiger in der gnazen Klasse. (natpürlich nur, wenn man nicht einen richtigen schreibt).Gruß Mümmel
-
muemmel schrieb:
Hi,
TyRoXx schrieb:
* sinnloser Standardkonstruktor
ist mit Sicherheit nicht sinnlos. ein privarer Standardkonstruktor verhindert, dass der Compiler mal fix einen erstellt und damit etwas generiert was Schwachsinn ist. (hat vermutlich mal Scott Meyers gelesen)
Die Existenz eines anderen Konstruktors verhindert genauso, dass der Compiler einen Standardkonstruktor generiert.