Programming/C/C++
이름공간(namespace)의 함정.
blueasa
2011. 3. 13. 14:35
name1 라는 이름공간과, 이에 속해있는 이름공간 name2 가 있고,
각각에는 Parent라는 이름을 가진 클래스가 있다고 하자.
즉, name1::Parent 와 name1::name2::Parent 클래스가 있는 상황이다.
이 때, Child라는 이름의 클래스를 하나 만들려고 한다.
name1::Parent 을 상속하며, 멤버 변수로는 name1::name2::Parent 클래스의 포인터를 가진다.
작업하는 코드의 상황은 이렇다.
이름은 Parent 로 같지만, 이름공간이 다른 이것들을 어떻게 표현해야할까?
본래, 자신이 있는 이름공간을 우선으로 검색되는 것이 기본 룰이지만, 이 경우는 예외다.
주목해야할 부분은 멤버 변수 선언 부분의 name2::Parent 이다.
자신이 name2 이름공간에 있음에도 불구하고, name2를 붙여주었다.
상속하는 클래스의 이름은 지금 있는 이름공간보다 우선시 되기 때문이다.
즉, name2를 명시하지 않고 단순히 Parent *p; 로 멤버 변수를 선언한다면,
p는 name2::Parent*형이 아니라 name1::Parent*형이 되어버린다.
[출처] [C++] 이름공간(namespace)의 함정.|작성자 레도
출처 : http://blog.naver.com/doogie90/130102637818
반응형