cpp:namespace

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Previous revision
cpp:namespace [2021/05/06 22:52]
cpp:namespace [2021/05/06 23:52]
gthanos [Παράδειγμα ορισμού και χρήσης μεταβλητών και μεθόδων με το ίδιο όνομα από δύο διαφορετικά namespaces]
Line 1: Line 1:
 +====== Χώροι Ονομάτων (Namespaces) ======
 +
 +Προκειμένου να αποφεύγονται οι συγκρούσεις ονομάτων μεταξύ //global// μεταβλητών, κλάσεων ή συνάρτησεων η C++ ορίζει την έννοια του χώρου ονομάτων (//namespace//). Ένας χώρος ονομάτων δίνει την δυνατότητα να ορίσουμε μεταβλητές, κλάσεις και μεθόδους μοναδικές μόνο για το συγκεκριμένο χώρο ονομάτων. Διαφορετικοί χώροι ονομάτων μπορεί να περιέχουν μεταβλητές, κλάσεις ή μεθόδους με τα ίδια ονόματα. 
 +
 +Ένα //namespace// ορίζεται ως εξής:
 +<code c++>
 +namespace identifier {
 +  named_entities
 +}
 +</code>
 +
 +Για παράδειγμα
 +<code c++>
 +namespace constants {
 +  const double golderRatio = 1.6180339887;
 +  double gRatio() { return golderRatio; }
 +}
 +</code>
 +
 +===== Προσπέλαση των στοιχείων του namespace =====
 +
 +Η προσπέλαση/χρήση των περιεχομένων ενός namespace μπορεί να γίνει με τους παρακάτω τρεις τρόπους!
 +
 +==== Δηλώνοντας το namespace σε κάθε κλήση των περιεχομένων του με την βοήθεια του τελεστή :: ====
 +
 +<WRAP center round tip 80%>
 +Ο τελεστής ''::'' ονομάζεται //scope operator//.
 +</WRAP>
 +
 +<code c++ 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;
 +}
 +</code>
 +
 +==== Mε δήλωση μόνο των ονομάτων που θα χρησιμοποιηθούν ====
 +
 +Χρησιμοποιούμε την έκφραση ''using namespace_name::var_name'', όπως παρακάτω:
 +
 +<code c++ namespace.cpp>
 +#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;
 +}
 +</code>
 +
 +==== Με δήλωση του namespace από το οποίο θα χρησιμοποιηθούν συγκεκριμένα ονόματα ====
 +
 +Χρησιμοποιούμε την έκφραση ''using namespace namespace_name'', όπως παρακάτω:
 +<code c++ 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;
 +}
 +</code>
 +
 +===== Παράδειγμα ορισμού και χρήσης μεταβλητών και μεθόδων με το ίδιο όνομα από δύο διαφορετικά namespaces =====
 +
 +Στο παράδειγμα που ακολουθεί ορίζονται δύο //namespaces// τα οποία περιέχουν μία μεταβλητή και μία συνάρτηση με κοινό όνομα. Παρατηρήστε πως διακρίνουμε τις επιμέρους μεταβλητές με χρήση του ονόματος του αντίστοιχου //namespace// πριν από την χρήση κάθε μεταβλητής ή συνάρτησης.
 +
 +<code c++ 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;
 +}
 +</code>
  
cpp/namespace.txt · Last modified: 2021/05/06 22:52 (external edit)