2017-01-13 8 views
-4

Namespaces und Klassen sind zwei verschiedene Konzepte in C++. Namespace dient nur dazu, Namenskollisionen zu verhindern, stattdessen ist eine Klasse ein benutzerdefinierter Typ.Warum haben Namespace und Klasse in C++ dieselbe Syntax?

Als Warum verwenden sie die gleiche :: Syntax?

Zum Beispiel:

namespace::function(); 
class::function(); 
+2

Ich empfehle Ihnen, ein [gutes Buch über C++] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) und lesen Sie das Kapitel, das den Umfang abdeckt Auflösungsoperator ('::'). –

+0

So viele Down-Stimmen? Ich dachte, es wäre eine interessante Frage und wurde nicht schon beim Stackoverflow gestellt. – iianfumenchu

+0

Tatsächlich scheinen die Downvotes hier zu streng zu sein. –

Antwort

6

Beide Namespaces und Klassen bilden scopes. Bereich ist ein Konzept, das ziemlich einheitlich mit beiden Namespaces und Klassen funktioniert: Es gibt Klassenbereich und es gibt Namespace-Bereich in C++ (sowie andere Arten von Bereichen). Und da :: ein Scope-Resolution-Operator ist, ist es nichts Ungewöhnliches, dass es synaptisch ähnlich mit Namespaces und Klassen verwendet wird.

2

Da Klassen, wie Namensräume, einen (normalerweise benannten) Geltungsbereich einführen. Der Scope-Resolution-Operator funktioniert genauso mit Klassen und Namespaces. Es würde keinen Vorteil geben, mehr Operatoren hinzuzufügen, um dasselbe zu tun.

Wenn Klassen haben keinen Rahmen vorstellen, gäbe es Schwierigkeiten:

struct buffer { 
    int size, *data; 
}; 

struct list { 
    node* head; 
    int size; // oops, name conflict! 
}; 

Offensichtlich Klassen müssen einen Rahmen für ihre Mitglieder einzuführen.

Verwandte Themen