C++

C++4일차

일어나코딩해야지 2018. 5. 30. 22:49

C++4일차


NAMESPACE


이번 시간에는 namespace에대해 더욱 잘 알아봅시자!!


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <cstdio>
 
using namespace std;
 
int n = 0//전역변수
void kk(void) { //일반함수
    cout << n << endl;
}
 
namespace aaa { //namespace aaa
    int n = 0;
    void ss(void);//28번째를 보면 정의를 해 놓았다. 따라서 우리는 namespace를 뗴어놓을수 있다.
}
 
int main(void) {
    aaa::n = 10// ::은 ::앞에있는 namespace안의 속해있는 변수나 함수를 얻는다 
    ::kk(); // ::앞에 아무것도 없으면 namespace안에 있지 않은 변수나 함수를 얻는다
    aaa::ss();
    cout << aaa::n << endl;
    getchar();
}
 
namespace aaa {
    void ss(void) { //namespace안에 있는 함수
        cout << n << endl;
    }
}
cs

위의 예제는 namespace에 대해 잘 알수 있는 예제입니다. (cstdio와 getchar()는 무시해 주세요)

위의 예제의 namespace안에 변수나 함수를 부르기 위해서는 (namespace의 이름)::(변수이름이나 함수이름); 이런식이라는

알수 있습니다. 또한 13번째 줄의 코드를 보면 ss라는 함수를 선언만 해놓은것을 알수 있습니다.

그다음으로 24번째 줄의 코드를 보면 함수가 정의가 된것을 알 수 있습니다. 따라서 우리는 namespace를 뗴어놓을수 있다는

것을 알 수 있습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <cstdio>
 
using namespace std;
 
int n; //전역
void set() {
    n = 10;
}
 
namespace dos {
    int n;
    void set() {
        n = 20;
    }
    namespace go { //dos라는 namespace안의 go 라는 namespace
        int n;
        void set() {
            n = 30;
        }
    }
}
 
int main(void) {
    set();
    dos::set();
    dos::go::set();
    cout << "전역변수 n : " << n << endl;
    cout << "dos안의 변수 n : " << dos::n << endl;
    cout << "dos안의 go안의 변수 n :" << dos::go::n << endl;
    getchar();
}
cs

위의 예제를 보고 namespace안에 namespace를 만들수 있으며 namespace안의 namespace의 안에 있는

함수나 변수를 사용하기 위해서는 (namespace의 이름)::(namespace안의 namespace이름)::(변수나함수); 이런식으로 사용

할수 있습니다.


p.s위의 예제에서 namespace안에서 set()함수를 쓰려고 한다고 생각해 봅시자!  근데 만약 namespace안에 n이라는 변수가 없다면

컴파일러는 n을 찾기위해서 namespace밖에 있는 n을 찾고 사용합니다. 그러니 주의하세요!!


p.s using namespace는 어디에나 넣어도 가능합니다. 하지만 main()안에 넣고 사용할경우 밖의 함수에서 std안에 있는 것을 사용

하려면 std::cout 이런식으로 다 써야합니다.