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
Next revision
Previous revision
Next revision Both sides next revision
cpp:namespace [2017/04/11 13:57]
gthanos
cpp:namespace [2021/05/06 23:51]
gthanos
Line 1: Line 1:
-====== Namespaces ======+====== Χώροι Ονομάτων (Namespaces======
  
-Προκειμένου να αποφεύγονται οι συγκρούσεις ονομάτων μεταξύ //global// μεταβλητών, κλάσεων ή συνάρτησεων η C++ ορίζει την έννοια του χώρου ονομάτων (//namespace//). Ένα //namespace// δίνει την δυνατότητα να ορίσουμε μεταβλητές, κλάσεις και μεθόδους σε ένα συγκεκριμένο χώρο ονομάτων. Η ύπαρξη πολλών //namespaces// δίνει την δυνατότητα να ορίσουμε δύο ή περισσότερες μεταβλητές, κλάσεις ή συναρτήσεις με το ίδιο όνομα που ανήκουν όμως σε διαφορετικούς χώρους ονομάτων.+Προκειμένου να αποφεύγονται οι συγκρούσεις ονομάτων μεταξύ //global// μεταβλητών, κλάσεων ή συνάρτησεων η C++ ορίζει την έννοια του χώρου ονομάτων (//namespace//). Ένας χώρος ονομάτων δίνει την δυνατότητα να ορίσουμε μεταβλητές, κλάσεις και μεθόδους μοναδικές μόνο για το συγκεκριμένο χώρο ονομάτων. Διαφορετικοί χώροι ονομάτων μπορεί να περιέχουν μεταβλητές, κλάσεις ή μεθόδους με τα ίδια ονόματα
  
 Ένα //namespace// ορίζεται ως εξής: Ένα //namespace// ορίζεται ως εξής:
Line 9: Line 9:
 } }
 </code> </code>
 +
 Για παράδειγμα Για παράδειγμα
 <code c++> <code c++>
 namespace constants { namespace constants {
-  const double var = 1.6180339887; +  const double golderRatio = 1.6180339887; 
-  double value() { return var; }+  double gRatio() { return golderRatio; }
 } }
 </code> </code>
  
-Η προσπέλαση των περιεχομένων ενός namespace μπορεί να γίνει με δύο τρόπους.+===== Προσπέλαση των στοιχείων του namespace ===== 
 + 
 +Η προσπέλαση/χρήση των περιεχομένων ενός namespace μπορεί να γίνει με τους παρακάτω τρεις τρόπους
 + 
 +==== Δηλώνοντας το namespace σε κάθε κλήση των περιεχομένων του με την βοήθεια του τελεστή :: ==== 
 + 
 +<WRAP center round tip 80%> 
 +Ο τελεστής ''::'' ονομάζεται //scope operator//. 
 +</WRAP>
  
-=== δηλώνοντας το namespace σε κάθε κλήση των περιεχομένων του με την βοήθεια του τελεστή ''::'' === 
 <code c++ namespace.cpp> <code c++ namespace.cpp>
 #include <iostream> #include <iostream>
Line 35: Line 43:
 </code> </code>
  
-=== με μία δήλωση στην αρχή του αρχείου των //namespaces// που θα χρησιμοποιηθούν ===+==== Mε δήλωση μόνο των ονομάτων που θα χρησιμοποιηθούν ===
 + 
 +Χρησιμοποιούμε την έκφραση ''using namespace_name::var_name'', όπως παρακάτω: 
 <code c++ namespace.cpp> <code c++ namespace.cpp>
 #include <iostream> #include <iostream>
Line 45: Line 56:
 } }
  
-using namespace constants;+using constants::gRatio;
  
 int main() { int main() {
-  cout << "Golden Ratio: " << golderRatio << endl;+  cout << "Golden Ratio: " << constants::golderRatio << endl;
   cout << "Golden Ratio: " << gRatio() << endl;   cout << "Golden Ratio: " << gRatio() << endl;
 } }
 </code> </code>
  
-Δείτε τα σχετικά παραδείγματα που ακολουθούν.+==== Με δήλωση του namespace από το οποίο θα χρησιμοποιηθούν συγκεκριμένα ονόματα ==== 
 + 
 +Χρησιμοποιούμε την έκφραση ''using namespace namespace_name'', όπως παρακάτω: 
 +<code c++ namespace.cpp> 
 +#include <iostream> 
 +using namespace std;
  
-<code c++> 
 namespace constants { namespace constants {
   const double golderRatio = 1.6180339887;   const double golderRatio = 1.6180339887;
-  double gRatio() { return var; }+  double gRatio() { return golderRatio; }
 } }
 +
 using namespace constants; using namespace constants;
 +
 int main() { int main() {
-  cout << "Golden Ratio: " << constants:: golderRatio << endl; +  cout << "Golden Ratio: " << golderRatio << endl; 
-  cout << "Golden Ratio: " << constants:: eRatio << endl;+  cout << "Golden Ratio: " << gRatio() << endl;
 } }
 </code> </code>
  
-Παρακάτω δίνεται ένα παράδειγμα, όπου ορίζονται δύο διαφορετικά //namespaces// τα οποία όμως έχουν μία μεταβλητή και μία συνάρτηση με το ίδιο όνομα. Δείτε πως  +===== Παράδειγμα ορισμού και χρήσης μεταβλητών και μεθόδων με το ίδιο όνομα από δύο διαφορετικά namespaces ===== 
 + 
 +Στο παράδειγμα που ακολουθεί ορίζονται δύο //namespaces// τα οποία περιέχουν μία μεταβλητή και μία συνάρτηση με το ίδιο όνομα. Δείτε πως διακρίνουμε τις επιμέρους μεταβλητές με χρήση του ονόματος του αντίστοιχου //namespace// πριν από την χρήση κάθε μεταβλητής ή συνάρτησης.
  
 <code c++ nameVisibility.cpp> <code c++ nameVisibility.cpp>
cpp/namespace.txt · Last modified: 2021/05/06 22:52 (external edit)