Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ FAQ
[3] using namespace std 는 언제 사용하는 것인가요?
김성진.kark [kark] 61520 읽음    2002-03-20 01:03
>> 질문 : 김진수 (miman101) 님 (C/C++ Q&A 게시판 218번 using namespace std 는 언제 사용하는 것인가요?   )
 
책의 모든 예제에 using namespace std; 를 사용 하구 있는데 무슨 의미로 사용 되구

있는 것인지 궁급합니다..

그리고 다음은 헬프 파일에 있는 예제 입니다.

#include
void main ( )
{
  using namespace std;
  char p[50];
  // remove all the white spaces
  cin >> ws;
  // read characters from stdin until a newline

  // or 49 characters have been read
  cin.getline(p,50);
  // output the result to stdout
  cout << p;   
}

여기서 cin >> ws; 화이트 영역을 모두 지운다라고 되있는데 이것도 무슨 의미인지 궁금합니다.
 
 
>> 답변 : (C/C++ Q&A 게시판 219번  Re:[질문] using namespace std 는 언제 사용하는 것인가요? )
 
using namespace std; 는 네임스페이스 std를 사용하겠다는 말입니다.

예를 보여드릴께요

namespace Window
{
      int a;
      class CData
      {
         public: CData() { cout << "Window::CData()"; }
      };
}

namespace Mouse
{
      int a;
      class CData
      {
         public: CData() { cout << "Mouse::CData()"; }
      };
}

위의 코드는 두개의 네임스페이스 Window 와 Mouse 를 선언한 것입니다.
만약에 사용자가 다음과 같이 코딩했다고 봅시다.

a = 10;
CData myData;

위에 코드는 어디에 있는 a 이고 어디에 있는 CData 일까요?
컴파일러는 구분할 수 없습니다. 그럼 어떻게 해야 할까요?

만약에 Window 의 네임스페이스 안에 있는 a 를 사용하고자 한다면
Window::a=10;
Window::CData myData;

라고 해 주어야 합니다. 여기서 :: (스코프연산자) 는 범위를 지정해 주는 연산자 입니다.
즉 Window 라는 네임스페이스 안의 a 라는 변수에 10 을 넣고 Window 라는 네임스페이스
안에 있는 CData 클래스의 객체를 생성하라는 코드가 됩니다. 그럼 myData 가 생성되면서
화면에 Window::CData() 라고 출력이 되겠죠.
그런데 매번 이렇게 Window::a = 10; Window::CData myData; 라고 해준다면 정말 불편할
것입니다. 그래서 우리는 using namespace 라는 컴파일러 명령어를 사용하는 것입니다.
우리가 using namespace Window 라고 한다면
a = 10;
CData myData;
라고 했을 때 컴파일러는 아 저거이 Window 네임스페이스 안에 있는 a 하고 CData 구나 하고
인식합니다.

그럼 다음을 볼까요?

int b;
namespace Window
{
     int a;
     int b;
}

using namespace Window;

라고 했을 때
b = 10;
이라면 어디의 b 를 말하는 것일까요?
바로 Window 네임스페이스 안에 있는 b 입니다.
하지만 프로그래머는 Window 네임스페이스 밖에 있는 b 에 접근하길 원합니다.
그럴 경우에는 어떻게 할까요?
바로 아래와 같이 합니다.
::b = 10;

앞에 아무런 네임스페이스도 써주지 않으면 전역 네임스페이스의 변수로 알죠.^^

그럼 std 란 무엇일까요?

C++ 에는 표준라이브러리가 있습니다. 그 중에 STL 이라고 하는 아주 훌륭한 넘도 있죠.

STL 은 네임스페이스를 이용해서 만들어 졌습니다. STL 의 네임스페이스가 std 이죠.

우리가 C++ 에서 자주 사용하는 입출력 객체인 cin 과 cout 은 바로 C++ 의 표준 의

입출력라이브러리 입니다. 표준 라이브러리는 다른 라이브러리와의 함수 이름, 클래스 이름

등의 충돌을 막기 위해서 네임스페이스를 쓰기로 했죠. 그것이 바로 std 입니다.

cin 과 cout 도 C++ 표준 라이브러리 이므로 당연히 using namespace std; 라고 해야

제대로 쓸 수 있겠죠. ^^

stl 은 우리가 C++ 로 프로그램을 짤 때 빈번하게 짜야되는 스택, 큐, 리스트, 여러알

고리즘 등을 매번 구현하지 않고도 모든 자료형에 쓸 수 있도록 만든 Standard Template Library

입니다. C++ 의 템플릿 기능을 이용해서 만들어졌죠.

STL 은 C++ 프로그래머에게 날개를 달아주는 놈이라고 할까요? ^^

꼭 공부하시길 바랍니다.

네임스페이스를 사용해서 클래스처럼 쓰는 예를 보여드릴까요? ^^

namespace Window
{
     void Move(int x, int y);
     void Name(char *szString);
     char* Name(void);
private:
     char m_myName[CHAR_MAX];
}

void Window::Move(int x, int y)
{
      //my code;
}

void Window::Name(char *szString)
{
   strcpy(Window::m_myName, szString);
}

char * Window::Name(void)
{
   return Window::m_myName;
}

using namespace Window;
void main()
{
   Name("my name is Douner ;)");
   cout << Name() << endl;
}


+ -

관련 글 리스트
3 using namespace std 는 언제 사용하는 것인가요? 김성진.kark 61520 2002/03/20
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.