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

C++빌더 Q&A
C++Builder Programming Q&A
[56706] Re:일부강좌에서의 문의사항
장성호 [nasilso] 1318 읽음    2009-04-22 06:15
이건 김태선님 강좌니 김태선 님이 답변해줘야는데.. ㅋㅋ

강아지 님이 쓰신 글 :
: 아래 소스 는 어떤 강좌에서 추출한 헤더 내의 소스입니다.
: 그런데, 클래스 생성시 내용에 문의점이 있어 글올립니다.
:
: <<<<<<<<<  ---------  ***** 이 부분이 이해가 안갑니다.
:
: 상기와 같은 표현으로 제 궁금증을 유발하는 문구를 표시하였습니다.
:
: 1. 
: 어떻게 T 라는 데이터 형이 있는지요?
: 그게 무슨 데이터 형인지요?

    C++템플릿이라는것을 공부좀 하셔야 겠네요.
   
     template<typename T> 라고 class선언 앞에 선언되어 있는것 보이세요   
     Tnew 클래스에 정해진 type이 아닌 여러가지 타입을 넣겟다는 것입니다.
      이런걸 generic(일반화)라고 하지요.
          

: 2.
: __property   라는 문구가 쓰였을 때와 안쓰였을 때의 차이점은?
       property는 .. 음...
      이건 OOP 언어에 가장 기본적적인 것인데 (C++ , Delph , C# , Java ...)
      private로 감쳐진 m_Size 변수를 Count 라는 이름으로 class밖으로 노출하고 있네요
      단 property에 read만  선언해둬서 m_Size값을 읽어올수는 있지만 변경(write)할수는 없겠죠
     

: 3.
: ZeroMemory(p, sizeof(T) * SIZE);    라는 문구에서   곱하기 SIZE 하는 것은 뭐죠?
 
     이건 그냥 초기화 하는것입니다.
     컴파일 타임에 정해진 type T의 를 SIZE갯수만큼 할당하는데...
     type T의 크기에다가 갯수만큼 곱해서 메모리를 0(Zero)로 초기화(memset) 하네요...


그럼..

:      
:
:
: //---------------------------------------------------------------------------
:
: #ifndef TnewH
: #define TnewH
: //---------------------------------------------------------------------------
: // Template new
: //        delete 가 필요없는 스마트 new.
: //      메모리를 힙에 할당받고 자동으로 속은 0로 초기화 한다.
: //        그러므로, 기본형과 String 외 typename T가 생성자를 거친후 0으로 초기화 되면 안되는 클래스를 사용하면 안되나,
: //        사용해야 할때는 생성자에서 ZeroMemory가 동작하지 않아야 하므로 생성자(크기,false) 를 인자로 준다.
: //        참고:String, TStringList, TList 는 생성된 직후 메모리가 모두 0이므로, 0으로 재초기화 가능하지만 일부러 그럴 필요없다.
: //
: //    Written by 김태성 cppbuilder@naver.com
:
: template<typename T>
: class Tnew
: {
: private:
:     T        *p;                 <<<<<<<<<  ---------  ***** 이 부분이 이해가 안갑니다.
:     int        m_Size;
: public:
:     __property int Count = { read = m_Size };   <<<<<<<<<  ---------  ***** 이 부분이 이해가 안갑니다.
: public:
:     Tnew(int SIZE, bool bClear = true)
:     {
:         p = new T[SIZE];          <<<<<<<<<  ---------  ***** 이 부분이 이해가 안갑니다.
:         if (bClear)
:             ZeroMemory(p, sizeof(T) * SIZE);   <<<<  ------  *** 이 부분이 이해가 안갑니다.
:         m_Size = SIZE;
:     }
:     ~Tnew()
:     {
:         delete[] p;
:     }
:     // 연산자 오버로딩.
:     Tnew& operator=(Tnew& src)
:     {
:         delete[] p;
:         p = new T[src.Count];
:         memcpy(p, (T *)src, src.Count * sizeof(T));
:         m_Size = src.Count;
:         return *this;
:     }
:     T* operator->() { return p; }
:     T& operator*()  { return *p; }
:     operator T*()     { return p; }
: };
: //---------------------------------------------------------------------------
: #endif

+ -

관련 글 리스트
56705 일부강좌에서의 문의사항 강아지 1241 2009/04/22
56707     Re:일부강좌에서의 문의사항 둘리.CSIEDA 1409 2009/04/22
56706     Re:일부강좌에서의 문의사항 장성호 1318 2009/04/22
56721         Re:Re:일부강좌에서의 문의사항 강아지 1018 2009/04/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.