User Tools

Site Tools


cpp:namespace

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;
}
cpp/namespace.1491919061.txt.gz · Last modified: 2017/04/11 12:57 (external edit)