Namespace innerhalb klassendeklaration...

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
DBGTMaster
Beiträge: 190
Registriert: 19. August 2010 10:00

Namespace innerhalb klassendeklaration...

Beitrag 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
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Namespace innerhalb klassendeklaration...

Beitrag 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.
unusual
Beiträge: 9
Registriert: 7. Juli 2010 13:33

Re: Namespace innerhalb klassendeklaration...

Beitrag 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
brax
Beiträge: 208
Registriert: 11. Mai 2010 11:22

Re: Namespace innerhalb klassendeklaration...

Beitrag 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.
unusual
Beiträge: 9
Registriert: 7. Juli 2010 13:33

Re: Namespace innerhalb klassendeklaration...

Beitrag 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!
Antworten