안녕하세요. letitkang입니다.
요즘 하루하루가 너무 빠른 느낌이에요.
그만큼 열심히 하고있다는건가요? ㅋㅋㅋ 더 열심히 삽시다!
'윤성우의 C++ 열혈강의' 공부하면서 포스팅하고있습니다!
오늘은 어제에 이어 이름공간 2번째 시간을 가지겠습니다.
다음 기능으로 이름공간은 중첩이 됩니다. 무슨말이냐? 간단한 예제를 보겠습니다.
===============================================================================================
namespace Parent
{
int num=2;
namespace Child1
{
int num=3;
}
namespace Child2
{
int num=4;
}
}
===============================================================================================
보면 충분히 짐작하실 겁니다. 이름공간 안에 이름 공간이 있습니다.
num 변수 3개가 있는데 각각 출력을 한번 해보겠습니다.
===============================================================================================
std::cout<<Parent::num<<std::endl; // num=2
std::cout<<Parent::Child1::num<<std::endl; // num=3
std::cout<<Parent::Child2::num<<std::endl; // num=4
===============================================================================================
더 이상의 설명은 생략합니다... 여러분은 머리가 좋으니깐요!
std::을 한번 살펴볼까요?
cout, cin을 사용할 때 std::를 앞에 붙이는데 바로 그 이유가 이름공간 때문입니다!
namespace std { } 이런 형식으로 되어 있겠죠?
그리고 또하나 using을 사용하여 이름공간을 명시할 수도 있습니다.
간단한 예제 살펴보겠습니다.
===============================================================================================
using을 사용한 소스 코드
===============================================================================================
1 #include <iostream>
2
3 using namespace std;
4
5 int main(void)
6 {
7 int num=2;
8 cout<<"Hello World!"<<endl;
9 cout<<num<<endl;
10 return 0;
11 }
===============================================================================================
위와 같이 3번째 줄에 'using namespace std;'를 추가 하면, 이름공간 지정을 생략하겠다는 뜻입니다ㅣ.
즉, 함수 안에서 std::를 붙이지 않고 cout, cin, endl만 입력해도 사용할 수 있습니다.
다음은 별칭에 관해 간단히 살펴보겠습니다.
===============================================================================================
namespace AAA
{
name space BBB
{
namespace CCC
{
num=2;
}
}
}
===============================================================================================
이런식으로 되어 있다면 num을 호출하려면 AAA::BBB::CCC::num이라고 호출을 하여야합니다.
이름공간이 길어진다면? 끔찍하죠. C++은 이런것을 별칭으로 정할 수 있습니다.
===============================================================================================
namespace ABC=AAA::BBB::CCC
ABC::num
===============================================================================================
간단하죠? 기본적인 것이니 알아두시면됩니다.
마지막으로 범위지정 연산자의 기능으로 마무리 하겠습니다.
===============================================================================================
int val = 100; // 전역변수
int SimpleFunc(void)
{
int val=20; // 지역변수
val+=3; // 지역변수
}
===============================================================================================
위의 코드는 변수의 지역성 때문이 지역변수 val이 +3됩니다.
결과는 전역변수 val은 100이, 지역변수 val은 23이 출력된다.
그럼 함수 내에서 전역변수 값은 어떻게 출력할수 있을까요?
아래 소스를 보겠습니다.
===============================================================================================
int val = 100; // 전역변수
int SimpleFunc(void)
{
int val=20; // 지역변수
val+=3; // 지역변수
::val+=7; // 전역변수
}
===============================================================================================
결과는 전역변수 val은 107이, val은 23이 출력됩니다.
전역변수 val에 접근하려면 범위지정 연산자인 ::를 변수 앞에 붙여주면, 전역 변수에 접근할 수 있습니다.