Seite 1 von 1

Namespace innerhalb klassendeklaration...

Verfasst: 22. August 2011 16:52
von DBGTMaster
Hallo,

ist solches irgendwie möglich??

Code: Alles auswählen

class A {
private:
  namespace test {
    QString _test;
    QString _var2;
  }
}
Lässt sich nicht kompilieren :( ... Habe aus dem Namespace nun ein struct gemacht, ist das aber so die ideale Lösung??

Ich möchte einfach ein paar Variablen Gruppieren, um besser erkennen zu können, dass diese einen Zusammenhang haben..

lG

Re: Namespace innerhalb klassendeklaration...

Verfasst: 22. August 2011 18:28
von franzf
Nein, namespace in struct/class geht nicht.
Wenn Objekte eine logische Einheit bilden, kann man die durchaus wieder in ein struct/class packen. Man sollte das aber nicht übertreiben - nicht alles was zusammenpasst, muss in eine eigene Einheit verfrachtet werden, vor allem dann wenn es nur an dieser einen Stelle eingesetzt wird und bis auf die Gruppierung keinen andere Aufgabe erfüllt.
Wenn du das dann nutzen willst, geht das aber nur über eine Instanz jenes structs.

Re: Namespace innerhalb klassendeklaration...

Verfasst: 26. Oktober 2011 13:16
von unusual
Hallo,
es gibt C in Klassen und es gibt C++ ;) - Nun ist C++ eine Sprache für objektorientierte Programmierung, aber pragmatischerweise kompatibel zu C. "namespaces" sehe ich als Relikt an. In manchen Fällen sind sie vielleicht ganz nützlich um allgemeine Definitionen z.B. einer Klassenbibliothek zusammenzufassen.
Eine Zusammenfassung von Daten sollte immer in einer Klasse oder einer Datenstruktur (struct) erfolgen. In C++ ist da quasi kein wirklicher Unterschied, nur dass eben das reservierte Wort "struct", bereits in C Daten zusammenfasst. Ein Unterschied sind die Standard-Zugriffsrechte: wird bei "struct" nichts weiter angegeben, sind die Eigenschaften "public" <-> bei "class" sind sie "private".
Ich persönlich würde immer "class" benutzen und Eigenschaften wirklich nur in absoluten Ausnahmefällen (Optimierung) öffentlich machen, sonst nur über Zugriffsmethoden. Dies ist erst mal aufwendigen zu kodieren, macht sich aber später bezahlt, wenn das Programm angewachsen ist und mehrfach umgebaute werden muss, oder Teile davon weiterverwendet werden. In der Praxis ist das an der Tagesordnung.
Ich hoffe, dass ich damit einen Betrag zu besserem C++ Verständnis geleistet habe.

lg

Mike

Re: Namespace innerhalb klassendeklaration...

Verfasst: 26. Oktober 2011 15:19
von brax
unusual hat geschrieben:Hallo,
es gibt C in Klassen und es gibt C++ ;) - Nun ist C++ eine Sprache für objektorientierte Programmierung, aber pragmatischerweise kompatibel zu C. "namespaces" sehe ich als Relikt an.
Ahem... in C gibt es keine namespaces.

Nebenbei: Stroustrup bezeichnet C++ bewusst nicht als objektorientierte Programmiersprache, sondern als "multi-paradigm language". Natürlich wird meist (fast) ausschließlich objektorientiert damit programmiert (und gerade Qt ist natürlich absolut objektorientiert aufgebaut), aber der Erfinder hat es eben nicht als reine OO Sprache gedacht und wird nicht müde, das in Interviews zu erwähnen. Das tut zum Problem nichts zur Sache, ist aber vielleicht mal eine Erwähnung wert.

Re: Namespace innerhalb klassendeklaration...

Verfasst: 26. Oktober 2011 16:16
von unusual
hmm - ok, da lag ich wohl etwas falsch - wohl waren namespaces dann der Weg um C-Code zu kapseln... wie auch immer, wir sind uns einig - hier sollte "class" verwendet werden.
Ich hab' mich für Stroustrup nie besonders interessiert und kenne auch keine Interviews mit ihm - jetzt wird mir aber vieles klar...
Ich bemühe mich jedenfalls C++ in objektorientierter Weise zu verwenden - und Qt ist das wirklich super...
Danke, brax, für den Hinweis!