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

C/C++ Q/A
[2450] Re:김백일님과 고수님들 에게 질문 -> ㅎㅎ 저는 고수가 아니라는 뜻이군요. 물론 사실이지만... ^^;
김백일.cedar [cedar] 1248 읽음    2003-04-21 13:26
김광수 님이 쓰신 글 :
: 제가 어셈을 해서 쪼금만 이상하면 꼭 집고 넣어가는 성격이거든요 헤헤~

C++은 어셈블리와는 완전히 반대의 성격을 갖고 있는 언어입니다.
특히 Accelerated C++은 포인터와 같은 저수준의 개념은 처음에 깡그리 무시하고,
고수준의 추상화된 개념부터 익히도록 되어 있습니다.
지금은 추상 개념부터 확실히 익히세요. 그러면 나중에 자연히 저수준 개념도 잘 이해할 수 있게 됩니다.

: Accelerated C++  책 보다가 앞장부터 막히내요~
: 전체 문장은 대충 생략하구요..
: const std::string spaces(greeting.size(),' ');
: 라는 문장에서 햇갈리는대요.
: 우선
: 1.spaces가 변수라고 책에서는 설명했는대 이건 제가 알고 있는 관점에서 보면 함수에 가까운대요.
: size만큼의 공백문자를 채우라는 함수라고 생각하는대 이걸 변수라구 하니 참 난감하내요

50페이지의 설명이 잘 이해가 안되시나요? AC++에 따르면,
std::string 타입의 변수인 spaces를 정의하는데 ()안의 표현식들 대로 '구성'한다는 의미입니다.
C++의 변수 정의는 원래 이런 겁니다.

: 이걸 변수라고 말하기전에 우선 std와 string에 대한 자세한 설명이 앞서야 되는대 이에 관해선 설명이 부실한거 같습니다..
: 얼래 보통 출력할려면 제가 배운내용대로라면 iso::cout 라는 걸 쓰는대 std라는 표준라이브러리?라는걸 쓰더군요.
: std가 정확히 어떤 일을 하는지는 잘 모르겠습니다. 네임스페이스의 일부라는거밖에는 ㅡ.,ㅡ
: 네임스페이스가 어떤 이름들을 그룹화 시키는거라는대..쩝... 원서 샀더라면 첫장읽고 덮었을것 같습니다.

이름공간(namespace)에 대한 간단한 설명은 제가 쓴 다음 글을 참고하세요.
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=cpp_qna&no=2356
지금은 이 정도만 알고 있으면 됩니다.

: 해석조차 힘드니 ..
: 변수안에 객체를 쓰구 컴포넌트(size)까지 정의하고 그걸 함수로까지 쓰다니 참 ~^^;;;;;;;;;;
: 암턴 책 내용은 제가 이해를 못하겠습니다.
: 알기쉽게 설명좀 해주세요 ㅠㅠ
:
: 특히 변수를 함수처럼 쓰는게 가장 햇갈림~...<==자세한 설명좀 부탁 (__)

예, 좀 더 자세히 설명해드리죠.

C++에서는 모든 변수 선언은 객체(클래스의 인스턴스)를 정의하는 걸로 보시면 됩니다.
심지어 int와 같은 기본 타입도 일종의 클래스로 볼 수 있습니다.
(정확히는 클래스가 아니지만, 클래스로 볼 수 있는 특징이 있다는 겁니다.)
객체가 처음 생성될 때는 생성자(constructor) 함수를 호출해서 객체의 속성을 초기화하는 과정을 거칩니다. 사용자가 지정하지 않아도 컴파일러가 기본 생성자 함수를 만들어서 자동으로 호출해 주는 겁니다.
즉, 굳이 string이 아니라 int의 경우도 컴파일러가 기본 제공하는 생성자를 써서 내용이 초기화 되는 겁니다. 예를 들어 C++에서는 다음과 같은 코드를 쓸 수 있습니다.

    int AValue(100); // 함수 호출처럼 보이지만, int AValue = 100; 과 동일합니다.
    std::cout << AValue << std::endl;

이렇게 하면 컴파일러 내부에서 int::int(int n)과 같은 식으로 생성자 함수를 만듭니다.
객체가 생성될 때 이 생성자가 호출되고, 이 생성자는 AValue 자신의 값을 100으로 초기화하게 됩니다.
 
string(정확히는 basic_string)의 생성자가 어떤 것이 있는가를 알아보려면
도움말을 검색해서 'Constructors'라고 되어 있는 부분을 찾아보세요.
basic_string 이라는 이름의 함수(생성자 함수는 클래스 이름과 동일한 이름을 갖습니다.)가 여러개가 있다는 것을 알 수 있습니다.

이 중에서 위의 예제에 해당하는 생성자는 다음 원형을 갖습니다.

basic_string(size_type n, charT c,
              const Allocator& a = Allocator());

여기서 Allocator(할당자) 부분은 일단 무시해도 됩니다.
모든 STL 컴포넌트는 할당자를 사용자 정의한 것으로 교체할 수 있는데,
특별한 경우 외에는 교체할 필요가 없으므로 무시하세요.
Allocator를 무시하면 다음과 같겠죠?

basic_string(size_type n, charT c);

도움말을 읽어보면, n은 string 객체의 크기를 n으로 초기화한다는 얘기고,
c는 n개의 모든 문자를 c로 초기화 한다는 겁니다.

즉, 다음 문장은
const std::string spaces(greeting.size(), ' ');

spaces 문자열을 greeting 문자열의 크기(size)와 같게 하되, 내용은 전부 공백(' ')으로 채워라
라는 뜻이죠. 이제 아시겠죠?

항상 모르는 부분은 도움말이나 레퍼런스를 참고하면 됩니다.
STL 부분은 http://www.sgi.com/tech/stl/ 이곳에서도 자세히 찾을 수가 있죠.


+ -

관련 글 리스트
2448 김백일님과 고수님들 에게 질문 Accelerated C++ 김광수 1215 2003/04/21
4013     Re:김백일님과 고수님들 에게 질문 Accelerated C++ 김광수 1163 2003/04/21
2450     Re:김백일님과 고수님들 에게 질문 -> ㅎㅎ 저는 고수가 아니라는 뜻이군요. 물론 사실이지만... ^^; 김백일.cedar 1248 2003/04/21
2464         Re:Re: 그건 고수님들, 특히 김백일님 이라는 뜻일 수도 있습니다. ILoveMe 1248 2003/04/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.