이름공간 : 이름을 붙여놓은 공간.
201호에 사는 철수와 202호에 사는 철수를 구분한 것.
필요성: 같은 company에서 각자 코드를 짰을 때 함수명이 겹칠 경우 등에서 필요
(C언어였다면? 각자 회사에서 코드 짜는거 다 이름 조금씩 다르게 해서 맡았어야 함;; => C++은 정말 진화한 언어다!)
결과: 각자의 함수 이름이 같아도 namespace가 다르므로 오류가 생기지 않음!
연산자 :: : 범위지정 연산자(scope resolution operator), 이름 공간을 지정할 때 사용하는 연산자.
1.이름공간 기반의 함수 선언과 정의의 구분
동일한 이름공간에 정의된 함수를 호출할 때에는 이름공간을 명시할 필요가 없음.
아래가 그 예
2.이름공간의 중첩
이름공간은 다른 이름공간 안에 삽입될 수 있음!
GOOD!
윤성우 p.43 문제4) 분할 컴파일
결과:
GOOD!
3.std::cout, std::cin, std::endl
지금까지 공부한 것으로 추측한 의미:
"이름공간 std에 선언된 cout, cin, endl"
이렇게 생겼을 것
namespace std
{
cout . . .
cin . . .
endl . . .
}
4.using을 이용한 이름공간의 명시
using이 std::를 항상 붙여야 하는 귀찮음을 해결해줌 / 항상 반복해서 namespace 불러야하는 문제 해결
위 코드는 HybFunc를 이름공간 Hybrid에서 찾으라는 선언.
출력 결과
선언이 main함수 내에서 존재하기 때문에 선언된 이후부터 효력을 발휘하며, 선언된 지역을 벗어나면 선언의 효력을 잃게 됨.
프로그램 전체 영역에 효력을 미치게 하려면 함수 밖에 선언해야...
아래 코드
-> using선언을 함수 밖의 전역의 형태로 삽입함.
일일이 using 선언을 하는 것이 귀찮다면
'이름공간 std에 선언된 모든 것에 대해 이름공간 지정의 생략' 명령 가능
using namespace std;
이렇게 선언하면 편한것은 사실이지만 이름충돌이 발생할 확률이 높아지므로 주의!
5.이름공간의 별칭 지정
이름공간이 중첩되었을 때 계속해서 파고들어가는것은 '간지'가 안 나므로.
이런 식으로 사용
6.범위지정 연산자(::)의 또다른 기능
전역변수에 접근할 수 있게 함!
int val = 100; //전역변수
int SimpleFunc(void)
{
int val = 20; //지역변수
val += 3; //지역변수 val의 값 3 증가
::val += 7; //전역변수 val의 값 7 증가
}
지역변수에 의해 가려지는 전역변수를 쓸 수 있게 함.
필요성 : 이C++은 공동작업 하기 좋은 시스템을 제공하면서도 코드네임을 간결하게 해주는 편리함을 제공해줌.
'LANG > C++' 카테고리의 다른 글
[C++]02-2.새로운 자료형 bool (0) | 2023.05.11 |
---|---|
[C++]02-1.Chapter 02의 시작에 앞서 (0) | 2023.05.11 |
[C++] 01-4.인라인(inline) 함수 (0) | 2023.05.11 |
[C++]01-3.매개변수의 디폴트 값 (0) | 2023.05.11 |
[C++] 01-2. 함수 오버로딩(Function Overloading) (0) | 2023.05.09 |