C ++의 네임 스페이스
같은 클래스에 Zara라는 같은 이름을 가진 두 사람이있는 상황을 생각해보십시오. 확실히 구별해야 할 때마다 이름과 함께 추가 정보를 사용해야합니다 (예 : 지역, 다른 지역에 살거나 어머니 또는 아버지의 이름 등).
C ++ 애플리케이션에서도 동일한 상황이 발생할 수 있습니다. 예를 들어, xyz ()라는 함수가있는 일부 코드를 작성하고 동일한 함수 xyz ()를 갖는 다른 라이브러리를 사용할 수 있습니다. 이제 컴파일러는 코드 내에서 참조하는 xyz () 함수의 버전을 알 수 없습니다.
ㅏ namespace이 어려움을 극복하기 위해 설계되었으며 다른 라이브러리에서 사용할 수있는 동일한 이름으로 유사한 함수, 클래스, 변수 등을 구별하기위한 추가 정보로 사용됩니다. 네임 스페이스를 사용하여 이름이 정의되는 컨텍스트를 정의 할 수 있습니다. 본질적으로 네임 스페이스는 범위를 정의합니다.
네임 스페이스 정의
네임 스페이스 정의는 키워드로 시작합니다. namespace 다음과 같이 네임 스페이스 이름 뒤에-
namespace namespace_name {
// code declarations
}
함수 나 변수의 네임 스페이스 사용 버전을 호출하려면 다음과 같이 네임 스페이스 이름 앞에 (: :)를 추가합니다.
name::code; // code could be variable or function.
네임 스페이스가 변수와 함수를 포함한 엔티티의 범위를 어떻게 지정하는지 살펴 보겠습니다.
#include <iostream>
using namespace std;
// first name space
namespace first_space {
void func() {
cout << "Inside first_space" << endl;
}
}
// second name space
namespace second_space {
void func() {
cout << "Inside second_space" << endl;
}
}
int main () {
// Calls function from first name space.
first_space::func();
// Calls function from second name space.
second_space::func();
return 0;
}
위의 코드를 컴파일하고 실행하면 다음 결과가 생성됩니다.
Inside first_space
Inside second_space
using 지시문
또한 using namespace지령. 이 지시문은 이후 코드가 지정된 네임 스페이스의 이름을 사용하고 있음을 컴파일러에 알립니다. 따라서 네임 스페이스는 다음 코드에 대해 암시됩니다.
#include <iostream>
using namespace std;
// first name space
namespace first_space {
void func() {
cout << "Inside first_space" << endl;
}
}
// second name space
namespace second_space {
void func() {
cout << "Inside second_space" << endl;
}
}
using namespace first_space;
int main () {
// This calls function from first name space.
func();
return 0;
}
위의 코드를 컴파일하고 실행하면 다음 결과가 생성됩니다.
Inside first_space
'using'지시문을 사용하여 네임 스페이스 내의 특정 항목을 참조 할 수도 있습니다. 예를 들어, 사용하려는 std 네임 스페이스의 유일한 부분이 cout 인 경우 다음과 같이 참조 할 수 있습니다.
using std::cout;
후속 코드는 네임 스페이스를 추가하지 않고 cout을 참조 할 수 있지만 std 네임 스페이스는 여전히 다음과 같이 명시 적이어야합니다.
#include <iostream>
using std::cout;
int main () {
cout << "std::endl is used with std!" << std::endl;
return 0;
}
위의 코드를 컴파일하고 실행하면 다음 결과가 생성됩니다.
std::endl is used with std!
에 소개 된 이름 using지시는 정상적인 범위 규칙을 따릅니다. 이름은 지점에서 볼 수 있습니다.using지시문이 발견 된 범위의 끝에 지시문. 외부 범위에 정의 된 동일한 이름을 가진 엔터티는 숨겨집니다.
불연속 네임 스페이스
네임 스페이스는 여러 부분으로 정의 될 수 있으므로 네임 스페이스는 별도로 정의 된 부분의 합계로 구성됩니다. 네임 스페이스의 개별 부분은 여러 파일에 분산 될 수 있습니다.
따라서 네임 스페이스의 한 부분에 다른 파일에 정의 된 이름이 필요한 경우 해당 이름을 선언해야합니다. 다음 네임 스페이스 정의를 작성하면 새 네임 스페이스를 정의하거나 기존 네임 스페이스에 새 요소를 추가합니다.
namespace namespace_name {
// code declarations
}
중첩 된 네임 스페이스
네임 스페이스는 다음과 같이 다른 네임 스페이스 내에 하나의 네임 스페이스를 정의 할 수있는 중첩 될 수 있습니다.
namespace namespace_name1 {
// code declarations
namespace namespace_name2 {
// code declarations
}
}
다음과 같이 해상도 연산자를 사용하여 중첩 된 네임 스페이스의 멤버에 액세스 할 수 있습니다.
// to access members of namespace_name2
using namespace namespace_name1::namespace_name2;
// to access members of namespace:name1
using namespace namespace_name1;
위의 문에서 namespace_name1을 사용하는 경우 다음과 같이 범위에서 namespace_name2의 요소를 사용할 수있게됩니다.
#include <iostream>
using namespace std;
// first name space
namespace first_space {
void func() {
cout << "Inside first_space" << endl;
}
// second name space
namespace second_space {
void func() {
cout << "Inside second_space" << endl;
}
}
}
using namespace first_space::second_space;
int main () {
// This calls function from second name space.
func();
return 0;
}
위의 코드를 컴파일하고 실행하면 다음 결과가 생성됩니다.
Inside second_space