Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

1

25.08.2004, 00:01

namespace - Wofür?

guten abend,
unter dem dateihandlingprobleme wurden namensbereiche angesprochen. Leider konnte ich mir auch nicht aus dem buch c++ in 21 tagen den sinn erklären. könnte jemand dieses bitte mal in seinen worten problieren wozu und wann man sie anwendet? die syntax kenne ich schon :-)
in diesem sinne einen angenehme nachtruhe

mfg
der dude

2

25.08.2004, 00:15

Ich empfehle dir ein anderes Buch zu kaufen. Die 21 Tage Bücher sind alle nicht so besonders. Das C++ Buch hatte ich auch mal, habs schnell wieder verkauft. Und DX in 21 Tagen ist auch nicht besonders.

Aber zu deiner Frage:
Namespaces werden gebraucht um die Zusammengehörigkeit von Modulen auszudrücken oder anders gesagt zur Gruppierung. Der Vorteil ist eine ordentliche Struktur und das Vermeiden von Klassen und Funktionen im globalen Namensbereich. Man muss dann jede Komponente qualifizieren um sie zu verwenden. Dadurch hat man aber auch gleich einen Überblick von welchem Modul die Komponente kommt. Wenn einem das zu viel arbeit ist kann man die Using-Direktive benutzen und dann kann man quasi auf die Komponenten zugreifen, also ob sie im globalen Namensbereich wären, sind sie aber zum Glück nicht.
Du kennst ja sicher using namespace std; Damit verwendest du ja den Standard Namensraum in dem z.B. cout und cin definiert sind.

Ich finde die Gruppierung von zusammengehörigen Komponenten sehr wichtig für eine gute Struktur im Programm.

Noch ein kleines fiktives Beispiel:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
namespace Graphics
{
 class CRenderer;
class CFontManager;;
class CTextureManager;
class CMeshManager;
// usw.

}

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

3

25.08.2004, 00:25

Hi,

ich poste mal den post aus dem letzten thread:

Zitat

Namespaces kann man als "Nachnamen" vergleichen für C++:
Beispiel:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int x = 33;  // Globaler Namespace kann so aufgerufen werden ::x = 22;


namespace Nox // "Nachname" "Nox"

{
   int x = 55; // Variable kann nur so aufgerufen werden Nox::x = 33; oder mit einer using-direktive

}

namespace Patrick // "Nachname" "Patrick"

{
   int x = 77; // Variable kann nur so aufgerufen werden Patrick::x = 33; oder mit einer using-direktive

}

// Benutzung:

::x = 9999; // Globaler Namespace, also Kein Nachname

Nix::x = 333; // Variable aus dem Namespace Nox

usw.


Namespaces sind extrem praktisch! man kann z.B. für eine WrapperAPI folgendes machen, einen Namespace Linux, Windows usw.

Oder bestes Beispiel bei mir momentan:
Engine hat den namen "Loki" und benutzt einen vector intern für 4 Dimensionen, benutzt wird er so:
loki::vector
das selbe mit matrizen:
loki::matrix
oder quaternions:
loki::quaternion

usw.

Also Praktisch und sollte man nicht in die ecke drücken ;)


Falls es nicht eindeutig ist, konkrete fragen stellen und ich erörtere es :)

-Patrick

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

4

25.08.2004, 12:36

Zitat

Nix::x = 333; // Variable aus dem Namespace Nox

:angry:
Hat uns unser Unterbewusstsein wohl einen streich gespielt.

Anonymous

unregistriert

5

25.08.2004, 13:20

Vielen dank erstmal für die antworten.

ich habe es jetzt so verstanden, dass namensbereiche zur gruppierung von funktionen und variablen erstellt werden.
z.b. ich habe ein "tolles :-)" programm und jede menge globaler variablen. da es zu überschreibungen mit den lokalen variablen aus den funktionen kommen kann, definiere ich einen namensbereich, von dem ich erst keine instanz erstellen muss. über den namesberich kann ich dann auf die variablen zugreifen - auch in den funktionen.

sind dafür namesbereiche gedacht?

mfg
der dude

6

25.08.2004, 13:36

Du kannst von einem Namensraum keine Instanz erzeugen.

Stell dir vor du arbeitest mit mehreren Programmieren zusammen und alle nutzen nur den globalen Namensraum. Jetzt hast du eine Funktion geschrieben, die den gleichen Namen usw. wie die eines anderen Entwicklers hat. Würdet ihr eueren Code dann zusammenwerfen, würde es zur Namenskollision der beiden Funktionen kommen.

Durch Namensräume kannst du alle zusammengehörige Komponenten in eine Struktur legen und sie vor Namenskollisionen mit anderen Funktionen schützen.

Noch ein kleines Beispiel:
Ich arbeite im Moment, wie so viele, an einer kleinen Engine. Diese teile ich in getrennt Subsystem auf. Dabei bekommt jedes Subsystem (Graphics, Input, System, ...) einen eigenen Namensraum. Dadurch strukturiere ich meine Subsystem und gruppiere alle zusammengehörige Komponenten.

Ich empfehle dir mal die folgende Seite durchzuarbeiten. Vielleicht verstehst du es dann besser:
http://msdn.microsoft.com/library/defaul…_namespaces.asp

Ich hoffe dir hat das was gebracht :ohoh:

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

7

25.08.2004, 20:52

@Nox:
Sorry warn tippfehler und kein angriff

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

8

26.08.2004, 09:41

ABer nen lustiger tippfehler ;)

Anonymous

unregistriert

9

29.08.2004, 22:21

Bin zwar jetzt erst dazu gekommen, aber erstmal danke :-)

Werbeanzeige