Klasse für Bruchzahlen gesucht
-
Das läuft wie folgt:
Member mit m_ kommt von MFC. :p
MFC ist schlechtes C++.
m_ ist schlecht für C++.Zur Zeit ist dataelement_ (nachgestellter Underscore) in.
Argument Herb Sutter: "Since I'm no longer allowed to use leading underscores as my "member variable" tag, I'll now use trailing underscores!" (s.u.)
Auch nicht gerade überzeugend, wie er argumentiert.Meine Meinung:
Alles ist irgendwie brauchbar und gleichzeitig beknackt.
(Ausnahme: voran gestellter Underscore)
siehe: http://www.gotw.ca/gotw/004.htm11. Style: Try to avoid names with leading underscores. Yes, I've habitually used them, and yes, popular books like "Design Patterns" (Gamma et al) do use it... but the standard reserves some leading-underscore identifiers for the implementation and the rules are hard enough to remember (for you and for compiler writers!) that you might as well avoid this in new code. (Since I'm no longer allowed to use leading underscores as my "member variable" tag, I'll now use trailing underscores!)
-
Es will mir nicht in den Kopf, warum private Member überhaupt gekennzeichnet werden müssen?!
-
Man möchte oft den gleichen Namen für die Membervariable wie auch eine als Parameter übergebene Variable benutzen (z.B. in einer Initialisierungsliste). Man kann zur Unterscheidung den Zeiger this vorstellen, aber elegant ist das wirklich nicht.
Hier ein kleiner Ausschnitt aus einer Klasse MyString:
class MyString { public: MyString(char* pText=NULL); // ctor MyString(const MyString& str); // Copy-Konstruktor MyString& operator=(const MyString& str); // Zuweisungsoperator ~MyString(); // dtor //... private: char* pText_; }; MyString::MyString(char* pText) { if (pText) { pText_ = new char[ strlen(pText+1) ]; strcpy(pText_, pText); } else { pText_ = new char[1]; *pText_='\0'; } }
Man hat die Membervariable pText_ und einen Parameter pText. Man kann sich hier streiten, ob m_pText und pText nicht eine klarer erkennbarere Unterscheidung bringen. Geschmacksache.
-
Ich finde this-> eigentlich ziemlich elegant, vor allem, weil man es sehr selten braucht. Meistens kann man das wunderbar über die Initialisierungsliste lösen.
Foo::Foo(int foo) : foo(foo) {}
-
Foo::Foo(int foo) : foo_(foo) {}
... gefällt mir zur Unterscheidung doch noch besser.
In dem MyString-Beispiel würdest du also lieber this->pText und pText einsetzen?
Falsch ist dies nicht, nur unüblich. Das Thema wurde bereits oft diskutiert, auch ob man get und set vorstellen oder weglassen sollte. Da muss jeder seinen eigenen Weg finden. Wichtig ist allerdings, dass man diesen dann auch durchhält.
-
get und set schreib ich sowieso, wobei ich versuche, statt setColor() färbe() oder sowas anzubieten. Im CTor schreib ich halt manchmal this. find ich besser als _.
Ich verstehe diese Hässlichkeit eh nicht. Da ist es ja noch schöner, itsAge, oder myAge zu schreiben.
-
Dir scheint der Underscore in Bezeichnungen nicht zu gefallen, das ist o.k., aber irgendwie unterscheiden sollte man, um nicht verschiedene Namen für das Gleiche verwenden zu müssen. Das ist aber nur meine Meinung. Bei Scott Meyers findet man z.B. folgende Klasse:
// a poorly designed String class class String { public: String(const char *value); ~String(); ... // no copy ctor or operator= private: char *data; }; String::String(const char *value) { if (value) { data = new char[strlen(value) + 1]; strcpy(data, value); } else { data = new char[1]; *data = '\0'; } }
Er bevorzugt data und value (also 2 Bezeichnungen) und mag hier auch kein p zur Kennzeichnung eines Zeigers.
Du hast die freie Auswahl!
-
Ja gut, das ist natürlich immer die eleganteste Lösung, zwei gleiche Namen zu vermeiden.
EDIT: Achso, das gefällt dir ja gerade nicht. Na was solls.
-
Wie gesagt, du musst es durchhalten. Deshalb solltest du dir klar werden, was dir oder deinem Team wichtig ist. Ein allgemeines Vorbild gibt es selbst bei den Gurus nicht. Da prägt wahrscheinlich jeder bewusst seinen eigenen Stil.
-
Optimizer schrieb:
Ich verstehe diese Hässlichkeit eh nicht. Da ist es ja noch schöner, itsAge, oder myAge zu schreiben.
aber ich. es liegt an "nur bittere medicin ist gut".
schüler lernen nur dann gut, wenn sie leiden.
und stil ist nur dann gut, wenn man drunter leidet.ist zwar unfug, geht aber aus den hirnen der hirnies nicht raus. also litten wir sinnloserweise unter un und struktogrammen und leiden sinnloserweise unter unterstrichen und uml und werden auch für alle zeiten immer wieder etwas finden, worunter wir leiden können.