This is an old revision of the document!
Namespaces
Προκειμένου να αποφεύγονται οι συγκρούσεις ονομάτων μεταξύ global μεταβλητών, κλάσεων ή συνάρτησεων η C++ ορίζει την έννοια του χώρου ονομάτων (namespace). Ένα namespace δίνει την δυνατότητα να ορίσουμε μεταβλητές, κλάσεις και μεθόδους σε ένα συγκεκριμένο χώρο ονομάτων. Η ύπαρξη πολλών namespaces δίνει την δυνατότητα να ορίσουμε δύο ή περισσότερες μεταβλητές, κλάσεις ή συναρτήσεις με το ίδιο όνομα που ανήκουν όμως σε διαφορετικούς χώρους ονομάτων.
Ένα namespace ορίζεται ως εξής:
namespace identifier { named_entities }
Για παράδειγμα
namespace constants { const double var = 1.6180339887; double value() { return var; } }
Η προσπέλαση των περιεχομένων ενός namespace μπορεί να γίνει με δύο τρόπους.
- δηλώνοντας το namespace σε κάθε κλήση των περιεχομένων του με την βοήθεια του τελεστή
::
.
- namespace.cpp
#include <iostream> using namespace std; namespace constants { const double golderRatio = 1.6180339887; double gRatio() { return golderRatio; } } int main() { cout << "Golden Ratio: " << constants::golderRatio << endl; cout << "Golden Ratio: " << constants::gRatio() << endl; }
- με μία δήλωση στην αρχή του αρχείου των namespaces που θα χρησιμοποιηθούν.
- namespace.cpp
#include <iostream> using namespace std; namespace constants { const double golderRatio = 1.6180339887; double gRatio() { return golderRatio; } } using namespace constants; int main() { cout << "Golden Ratio: " << golderRatio << endl; cout << "Golden Ratio: " << gRatio() << endl; }
Δείτε τα σχετικά παραδείγματα που ακολουθούν.
namespace constants { const double golderRatio = 1.6180339887; double gRatio() { return var; } } using namespace constants; int main() { cout << "Golden Ratio: " << constants:: golderRatio << endl; cout << "Golden Ratio: " << constants:: eRatio << endl; }
Παρακάτω δίνεται ένα παράδειγμα, όπου ορίζονται δύο διαφορετικά namespaces τα οποία όμως έχουν μία μεταβλητή και μία συνάρτηση με το ίδιο όνομα. Δείτε πως
- nameVisibility.cpp
#include <iostream> using namespace std; namespace euler { const double var = 2.71828; double value() { return var; } } namespace pi { const double var = 3.1416; double value() { return var; } } int main () { cout << pi::var << '\n'; cout << pi::value() << '\n'; cout << euler::var << '\n'; cout << euler::value() << '\n'; return 0; }