Latest web development tutorials

nazw C ++

Wyobraźmy sobie sytuację, gdy istnieje klasa o nazwie Zara dwóch studentów, w celu wyraźnego rozróżnienia między nimi, używamy nazwy zewnątrz, musiał użyć kilka dodatkowych informacji, takich jak adres domowy lub rodziców nazwa, itp

Taka sama sytuacja występuje również w zgłoszeniu C ++. Na przykład, można napisać funkcję o nazwie xyz (), w innej dostępnej bibliotece znajduje się również funkcja taką samą xyz (). Zatem, kompilator nie może określić, jakie używasz xyz funkcję ().

W związku z tym wprowadzenie pojęcianazw, mające nacelu rozwiązanie powyższych problemów, to mogą być stosowane jako dodatkowa informacja umożliwia rozróżnienie bibliotek tych samych funkcji nazwy, klasy, zmienne, i tak dalej. Używanie nazw, który jest zdefiniowany kontekst. W istocie, nazw jest definicja zakresu.

Definiowanie przestrzeni nazw

Zdefiniowanenazw słów kluczowych nazw, anastępnie nazwą przestrzeni nazw, co następuje:

namespace namespace_name {
   // 代码声明
}

W celu wywołania funkcji lub zmiennej w przestrzeni nazw, trzeba poprzedzić go z nazwą przestrzeni nazw, co następuje:

name::code;  // code 可以是变量或函数

Zobaczmy, jak definicja przestrzeni nazw dla podmiotu oraz innych funkcji lub zmiennych:

#include <iostream>
using namespace std;

// 第一个命名空间
namespace first_space{
   void func(){
      cout << "Inside first_space" << endl;
   }
}
// 第二个命名空间
namespace second_space{
   void func(){
      cout << "Inside second_space" << endl;
   }
}
int main ()
{
 
   // 调用第一个命名空间中的函数
   first_space::func();
   
   // 调用第二个命名空间中的函数
   second_space::func(); 

   return 0;
}

Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:

Inside first_space
Inside second_space

za pomocą instrukcji

Można użyć dyrektywyusing namespace tak, że gdy nie można używać nazw z przedrostkiem z nazwą przestrzeni nazw.Dyrektywa ta informuje kompilator, że kolejny kod korzystania z określonej nazwy przestrzeni nazw.

#include <iostream>
using namespace std;

// 第一个命名空间
namespace first_space{
   void func(){
      cout << "Inside first_space" << endl;
   }
}
// 第二个命名空间
namespace second_space{
   void func(){
      cout << "Inside second_space" << endl;
   }
}
using namespace first_space;
int main ()
{
 
   // 调用第一个命名空间中的函数
   func();
   
   return 0;
}

Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:

Inside first_space

wykorzystujące instrukcje mogą być również wykorzystywane w celu określenia konkretnych elementów przestrzeni nazw. Na przykład, jeśli masz zamiar używać tylko std sekcję nazw cout, można użyć następujące oświadczenie:

using std::cout;

Późniejsza kodu przy użyciu cout nie można dodać nazwę przestrzeni nazw jako przedrostek, ale przestrzeni nazwstd inne przedmioty jeszcze trzeba dodać nazwę przestrzeni nazw jako przedrostek, co następuje:

#include <iostream>
using std::cout;

int main ()
{
 
   cout << "std::endl is used with std!" << std::endl;
   
   return 0;
}

Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:

std::endl is used with std!

Imiękorzystając z instrukcji wprowadzonych postępuj według normalnych zasad zakresie.Nazwy zużyciemdyrektywy początkowo widoczne aż do końca zakresu. W tym przypadku, ta sama nazwa poza zakresem definicji jednostek jest ukryta.

nazw Lamela

Nazw można definiować na różne części, a więc nazw składa się z kilku części oddzielnie określonym składzie. Różne elementy przestrzeni nazw mogą być rozłożone na wielu plikach.

Dlatego też, jeśli część nazw potrzeby poprosić o nazwę zdefiniowaną w innym pliku, trzeba jeszcze zadeklarować nazwę. Następująca definicja przestrzeni nazw można zdefiniować nową przestrzeń nazw, może to być dla istniejącej przestrzeni nazw, aby dodać nowe elementy:

namespace namespace_name {
   // 代码声明
}

zagnieżdżone przestrzenie nazw

Przestrzenie nazw mogą być zagnieżdżone, można zdefiniować inną przestrzeń nazw w obszarze nazw, co następuje:

namespace namespace_name1 {
   // 代码声明
   namespace namespace_name2 {
      // 代码声明
   }
}

Można użyć :: operatorowi dostępu do zagnieżdżonych elementów przestrzeni nazw:

// 访问 namespace_name2 中的成员
using namespace namespace_name1::namespace_name2;

// 访问 namespace:name1 中的成员
using namespace namespace_name1;

W powyższym oświadczeniu, jeśli używasz namespace_name1, a następnie w zakresie elementów namespace_name2 również dostępna w następujący sposób:

#include <iostream>
using namespace std;

// 第一个命名空间
namespace first_space{
   void func(){
      cout << "Inside first_space" << endl;
   }
   // 第二个命名空间
   namespace second_space{
      void func(){
         cout << "Inside second_space" << endl;
      }
   }
}
using namespace first_space::second_space;
int main ()
{
 
   // 调用第二个命名空间中的函数
   func();
   
   return 0;
}

Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:

Inside second_space