Προκειμένου να αποφεύγονται οι συγκρούσεις ονομάτων μεταξύ global μεταβλητών, κλάσεων ή συνάρτησεων η C++ ορίζει την έννοια του χώρου ονομάτων (namespace). Ένας χώρος ονομάτων δίνει την δυνατότητα να ορίσουμε μεταβλητές, κλάσεις και μεθόδους μοναδικές μόνο για το συγκεκριμένο χώρο ονομάτων. Διαφορετικοί χώροι ονομάτων μπορεί να περιέχουν μεταβλητές, κλάσεις ή μεθόδους με τα ίδια ονόματα.
Ένα namespace ορίζεται ως εξής:
namespace identifier { named_entities }
Για παράδειγμα
namespace constants { const double golderRatio = 1.6180339887; double gRatio() { return golderRatio; } }
Η προσπέλαση/χρήση των περιεχομένων ενός namespace μπορεί να γίνει με τους παρακάτω τρεις τρόπους!
Ο τελεστής ::
ονομάζεται scope operator.
#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; }
Χρησιμοποιούμε την έκφραση using namespace_name::var_name
, όπως παρακάτω:
#include <iostream> using namespace std; namespace constants { const double golderRatio = 1.6180339887; double gRatio() { return golderRatio; } } using constants::gRatio; int main() { cout << "Golden Ratio: " << constants::golderRatio << endl; cout << "Golden Ratio: " << gRatio() << endl; }
Χρησιμοποιούμε την έκφραση using namespace namespace_name
, όπως παρακάτω:
#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; }
Στο παράδειγμα που ακολουθεί ορίζονται δύο namespaces τα οποία περιέχουν μία μεταβλητή και μία συνάρτηση με κοινό όνομα. Παρατηρήστε πως διακρίνουμε τις επιμέρους μεταβλητές με χρήση του ονόματος του αντίστοιχου namespace πριν από την χρήση κάθε μεταβλητής ή συνάρτησης.
#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; }