C++의 네임스페이스 | 세트 3(액세스, 헤더 생성, 중첩 및 앨리어싱)
C++의 네임스페이스 | 세트 1(소개) C++의 네임스페이스 | 세트 2(확장 네임스페이스 및 이름 없는 네임스페이스)
네임스페이스에 액세스하는 다양한 방법: C++에는 네임스페이스 변수와 함수에 액세스하는 두 가지 방법이 있습니다.
네임스페이스 정의:
네임스페이스 정의는 다음과 같이 네임스페이스 키워드로 시작하고 그 뒤에 네임스페이스 이름이 옵니다.
namespace namespace_name
{
// code declarations i.e. variable (int a;)
method (void add();)
classes ( class student{};)
}닫는 중괄호 뒤에는 세미콜론(;)이 없다는 점에 유의하세요.
함수 또는 변수의 네임스페이스 지원 버전을 호출하려면 다음과 같이 네임스페이스 이름을 앞에 추가하세요.
네임스페이스_이름: :code; // 코드는 변수 함수 또는 클래스일 수 있습니다.사용 지시문:
using 네임스페이스 지시문을 사용하면 네임스페이스가 앞에 추가되는 것을 방지할 수도 있습니다. 이 지시문은 후속 코드가 지정된 네임스페이스의 이름을 사용하고 있음을 컴파일러에 알립니다.
C++
따라서 네임스페이스는 다음 코드에 대해 암시됩니다.#includeusing 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 ; } using 지시문에 도입된 이름은 일반 범위 규칙을 따릅니다. 이름은 using 지시문 지점부터 지시문이 있는 범위 끝까지 표시됩니다. 외부 범위에 정의된 동일한 이름을 가진 엔터티는 숨겨집니다.
중첩된 네임스페이스:
네임스페이스는 다음과 같이 다른 네임스페이스 내에 하나의 네임스페이스를 정의할 수 있는 중첩될 수 있습니다.
namespace namespace_name1
{
// code declarations
namespace namespace_name2
{
// code declarations
}
}다음과 같이 확인 연산자를 사용하여 중첩된 네임스페이스의 멤버에 액세스할 수 있습니다.
//namespace_name2의 멤버에 액세스합니다.
네임스페이스 네임스페이스_name1::namespace_name2 사용;
// 네임스페이스:name1의 멤버에 액세스합니다.
네임스페이스 네임스페이스_name1 사용;C++
위 문에서 네임스페이스_이름1을 사용하는 경우 다음과 같이 범위에서 네임스페이스_이름2의 요소를 사용할 수 있게 됩니다.#includeusing 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 ; } 1. 일반적인 방법
CPP// C++ program to demonstrate accessing of variables // in normal way i.e. using '::' #includeusing namespace std ; namespace geek { int rel = 300 ; } int main () { // variable ‘rel’ accessed // using scope resolution operator cout & lt ; & lt ; geek :: rel & lt ; & lt ; & quot ; n & quot ;; // prints 300 return 0 ; } 출력 :
300
2. '사용' 지시문
CPP// C++ program to demonstrate accessing of variables // in normal way i.e. using 'using' directive #includeusing namespace std ; namespace geek { int rel = 300 ; } // use of ‘using’ directive using namespace geek ; int main () { // variable ‘rel’ accessed // without using scope resolution variable cout & lt ; & lt ; rel & lt ; & lt ; & quot ; n & quot ;; //prints 300 return 0 ; } 산출:
300
헤더 파일에서 네임스페이스 사용 한 파일에 네임스페이스를 만들고 다른 프로그램을 사용하여 콘텐츠에 액세스할 수 있습니다. 이는 다음과 같은 방식으로 수행됩니다.
- 두 개의 파일을 만들어야 합니다. 나중에 사용하려는 네임스페이스와 모든 데이터 멤버 및 멤버 함수를 포함하는 것입니다.
- 그리고 다른 프로그램은 첫 번째 프로그램을 직접 호출하여 그 안에 있는 모든 데이터 멤버와 멤버 함수를 사용할 수 있습니다.
파일 1
CPP // file1.h namespace foo { int value () { return 5 ; } }
파일 2
CPP // file2.cpp - Not to be executed online #include #include file1.h // Including file1 using namespace std ; int main () { cout & lt ; & lt ; foo :: value (); return 0 ; }
여기서는 네임스페이스가 file1.h에 생성되고 해당 네임스페이스의 value()가 file2.cpp에서 호출되는 것을 볼 수 있습니다. 중첩된 네임스페이스 C++에서는 네임스페이스가 중첩될 수도 있습니다. 즉, 하나의 네임스페이스가 다른 네임스페이스 안에 포함될 수도 있습니다. 네임스페이스 변수의 확인은 계층적입니다.
CPP // C++ program to demonstrate nesting of namespaces #include using namespace std ; // Nested namespace namespace out { int val = 5 ; namespace in { int val2 = val ; } } // Driver code int main () { cout & lt ; & lt ; out :: in :: val2 ; // prints 5 return 0 ; }
출력 :
5
네임스페이스 앨리어싱: C++에서는 사용 편의성을 위해 네임스페이스 이름에 별칭 이름을 사용할 수 있습니다. 기존 네임스페이스는 다음 구문을 사용하여 새 이름으로 별칭을 지정할 수 있습니다.
namespace new_name = current_name;
CPP#includenamespace name1 { namespace name2 { namespace name3 { int var = 42 ; } } } // Aliasing namespace alias = name1 :: name2 :: name3 ; int main () { std :: cout & lt ; & lt ; alias :: var & lt ; & lt ; 'n' ; } 출력 :
42
GeeksforGeeks를 좋아하고 기여하고 싶다면 다음을 사용하여 기사를 작성할 수도 있습니다. write.geeksforgeeks.org 또는 기사를 [email protected]로 우편으로 보내세요. GeeksforGeeks 메인 페이지에 나타나는 기사를 보고 다른 Geeks를 도와주세요.