네임스페이스
2019. 8. 20. 00:11ㆍPL/C++
함수 이름과 매개변수 형식이 같을 때 이를 구분해줄 수 있도록 하는 것이 namespace 이름공간이다
참고로 전역변수도 ::으로 표시할 수 있다. 전역변수이기 때문에, namespace는 명시하지 않아도 된다
#include <iostream>
using namespace std;
int n;
void set() {
::n = 10;
}
namespace A {
int n;
void set() {
n = 20;
}
}
namespace B {
int n;
void set() {
n = 30;
}
}
int main(void) {
::set();
A::set();
B::set();
cout << ::n << '\n';
cout << A::n << '\n';
cout << B::n << '\n';
return 0;
}
namespace는 어디서든지 재정의 할 수 있다. 두 가지 방법이 있다
#include <iostream>
using namespace std;
int n;
void set() {
::n = 10;
}
namespace A {
int n;
void set();
}
namespace B {
int n;
void set();
}
int main(void) {
::set();
A::set();
B::set();
cout << ::n << '\n';
cout << A::n << '\n';
cout << B::n << '\n';
return 0;
}
namespace A {
void set() {
n = 20;
}
}
void B::set() {
n = 30;
}
namespace 안에 namespace를 정의할 수 있다. 그리고 반드시 함수보다 변수를 위에 작성하는 습관을 들이는 것이 좋다
#include <iostream>
using namespace std;
int n;
void set() {
::n = 10;
}
namespace A {
int n;
void set() {
n = 20;
}
namespace B {
int n;
void set() {
n = 30;
}
}
}
int main(void) {
::set();
A::set();
A::B::set();
cout << ::n << '\n';
cout << A::n << '\n';
cout << A::B::n << '\n';
return 0;
}
위와 똑같이 밖에서 정의할 수 있다
#include <iostream>
using namespace std;
int n;
void set() {
::n = 10;
}
namespace A {
int n;
void set();
namespace B {
int n;
void set();
}
}
int main(void) {
::set();
A::set();
A::B::set();
cout << ::n << '\n';
cout << A::n << '\n';
cout << A::B::n << '\n';
return 0;
}
void A::set() {
n = 20;
}
void A::B::set() {
n = 30;
}
'PL > C++' 카테고리의 다른 글
디폴트 생성자가 사라지는 경우 (0) | 2019.08.21 |
---|---|
복사생성자와 치환연산자를 정의할 때 주의할 점 (0) | 2019.08.20 |
연산자를 오버로딩하는 두 가지 방법 (0) | 2019.08.19 |
연산자 오버로딩 =과 == (0) | 2019.08.19 |
[boost.Asio tutorial] Using a member function as a handler (0) | 2019.08.14 |