|
답변 주신 모든분들께 감사드립니다.
아픙로 공부좀 더 열심히 해야 겠네요~!^^
감사감사~!^^
장성호 님이 쓰신 글 :
: 이건 김태선님 강좌니 김태선 님이 답변해줘야는데.. ㅋㅋ
:
: 강아지 님이 쓰신 글 :
: : 아래 소스 는 어떤 강좌에서 추출한 헤더 내의 소스입니다.
: : 그런데, 클래스 생성시 내용에 문의점이 있어 글올립니다.
: :
: : <<<<<<<<< --------- ***** 이 부분이 이해가 안갑니다.
: :
: : 상기와 같은 표현으로 제 궁금증을 유발하는 문구를 표시하였습니다.
: :
: : 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
|