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;
}

με μία δήλωση ονομάτων που θα χρησιμοποιηθούν από ένα namespace

namespace.cpp
#include <iostream>
using namespace std;
 
namespace constants {
  const double golderRatio = 1.6180339887;
  double gRatio() { return golderRatio; }
}
 
using namespace constants:gRatio;
 
int main() {
  cout << "Golden Ratio: " << constants::golderRatio << endl;
  cout << "Golden Ratio: " << 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;
}

Δείτε τα σχετικά παραδείγματα που ακολουθούν.

Παρακάτω δίνεται ένα παράδειγμα, όπου ορίζονται δύο διαφορετικά 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.1491919274.txt.gz · Last modified: 2017/04/11 13:01 (external edit)