메뉴 건너뛰기

창조도시 기록보관소

체계적인 C++ 강좌를 올리고자 하는 사람입니다...


그런데... 솔직히 어느 정도의 수준으로 C++ 강좌를 올려야 할지 모르겠군요. 순수 프로그래밍을 배우자기 보다는, 게임을 만들기 위한것이니... 다이렉트X 나 XNA Studio를 다뤄봐야 하는지... 고민되네요^^...


 


사실, RPG 만들기는 일반적인 RPG 게임을 손쉽게 만들 수 있다는 장점이 있지만, 진보적이고, 전문적이며, 고급의 게임을


만들기에는 무리가 있으며 많이 부족하지요. 진정으로 게임을 제대로 만들고자 한다면, 역시 프로그래밍을 익혀야 겠지요.


 


저는, 이곳에 강좌를 첨 올려보므로... 제가 아는 지식을 슬쩍 한번 시험삼아 올려보고자 합니다...


반응을 봐 가면서 방향을 결정 해 보도록 하지요. 아래쪽부터는, 편의를 위해 존대말을 사용하지 않습니다.


양해 바랍니다.


 


기본 생성자와 소멸자


 


생성자와 소멸자를 선언하지 않으면, 컴파일러가 그 일을 대신 처리한다. 기본 생성자와 소멸자는 인수를 가지지 않으며, 아무 일도 하지 않는다.


 


아무것도 하지 않는 생성자가 무엇이 좋은가? 부분적으로는 양식의 문제이다. 모든 개체는 만들어지고, 파괴되어야 하고, 이런 아무것도 하지 않는 함수가 제때에 호출되어야 한다. 하지만 다음과 같은 매개 변수를 전달하지 않고 개체를 선언하려면,


 


    Cat Rags; // Rags는 매개 변수가 없다


 


다음과 같이 생성자를 만들어야 한다.


 


    Cat();


 


클래스의 개체를 선언할 경우 생성자가 호출된다. Cat 생성자가 두 개의 매개 변수를 가지면, 다음과 같이 작성하여 Cat 개체를 정의해야 한다.


 


    Cat Frisky(5, 7);


 


생성자가 하나의 매개 변수를 가지면 다음과 같이 작성한다.


 


    Cat Frisky(3);


 


생성자가 전혀 매개 변수를 가지지 않는 경우, 괄호를 빼고 적어야 한다.


 


    Cat Frisky;


 


이것은 모든 함수가 매개 변수를 가지지 않을 경우에라도 괄호를 가져야만 한다는 규칙에 대한 예외이다.


이런 이유 때문에 다음과 같이 적을 수 있다.


   


    Cat Frisky;


 


이것은 기본 생성자를 호출한다. 매개 변수가 없으므로 괄호를 생략한 것이다. 반드시 컴파일러가 제공하는 기본 생성자를 사용할 필요는 없다. 항상 자유롭게 매개 변수가 없는 자신의 생성자를 만들 수 있다. 매개 변수를 가지지 않는 생성자라 해도 개체를 초기화하거나 다른일을 하는 함수 본체를 가질 수 있다.


 


양식과 관련된 문제인데, 생성자를 선언할 경우, 소멸자가 아무일도 하지 않더라도 소멸자를 선언 했는지 확인하도록 한다.


기본 소멸자가 제대로 잘 동작하겠지만, 자신의 것을 선언하는 것이 그리 힘들지는 않을 것이다.


 


그렇게 하면 고드가 좀더 깔끔해 보인다.


 


다음은 생성자와 소멸자를 사용한 예이다.


 


 


*** 예제


#include <iostream.h>


 


Class Cat


{


  public:


    Cat(int initialAge);


    ~Cat();


    int GetAge();


    void SetAge(int age);


    void Meow();


  private:


    int itsAge();


};


 


Cat::Cat(int initialAge)


{


  itsAge = initialAge;


}


 


 


Cat::~Cat()


{


}


 


int Cat::GetAge()


{


  return itsAge;


}


 


void Cat::SetAge(int age)


{


  itsAge = age;


}


 


void Cat::Meow()


{


  cout << "Meow.n";


}


 


int main()


{


  Cat Frisky(5);


  Frisky.Meow();


  cout << "Frisky is a cat who is ";


  cout << Frisky.GetAge() << " years oldn";


  Frisky.Meow();


  Frisky.SetAge(7);


  cout << "Now Frisky is ";


  cout << Frisky.GetAge() << " years oldn";


  return 0;


}


 


 


*** 결과:


Meow.


Frisky is a cat who is 5 years old.


Meow.


Now Frisky is 7 years old.


 


흠... 일단 클래스의 생성자와 소멸자에 관한 내용을 올려봅니다...


데이터 멤버나 메소드에 관한 설명도 없이 이 내용만 달랑 올리기는 그렇지만...


시험삼아 올려 봅니다.


 


읽으신 분은 댓글을 부탁드립니다.

번호 제목 글쓴이 날짜 조회 수
409 초보자를 위한 그래픽 소스 게임에 넣을 때의 팁. [3] file 한글화마스터 2007.07.15 1025
408 [THDO]판화 세계지도제작 스크립트. [7] file 협객 2007.06.25 1668
407 바실리어트 - 비주얼노벨형 게임 제작용 엔진 [4] 플루비아♥ 2007.06.24 954
406 [스크립트 문제]RPGXP에서 타일셋의 우선순위 문제 해결 [1] file Novelist 2007.06.19 809
» [C++] 클래스(객체지향) - 기본 생성자와 소멸자 [3] Sirjhswin 2007.06.11 487
404 RPGXP의 기본전투 속도를 더욱 빠르게~ [9] Novelist 2007.06.08 1139
403 [C++] 한글과 영어가 섞인 문자열의 길이 체크 [4] Zeprod 2007.05.27 1427
402 [DX&C++] 화면에 글씨를 써볼까요. [2] Zeprod 2007.05.17 741
401 미소녀 제작기에 대해. Light 사의 Lum 툴....? [4] 협객 2007.05.14 1100
400 윈터뮤트 엔진.....이라는군요. [1] 협객 2007.05.13 592
399 vnap 로드는 load로 되는데 세이브는 save로 안된다??????????? ㅡ.ㅡ; [2] 협객 2007.05.13 550
398 [구기술체험소] Fast Chatting System [2] file 비밀소년 2007.04.30 678
397 [구기술체험소] Fast Animation System [2] file 비밀소년 2007.04.30 763
396 턴알에서 순간데미지 2배이상으로늘리기[턴알] [2] Dship 2007.04.28 716
395 오랜만에 잡담 하나 [4] 아란 2007.04.27 367
394 렉없는 자동세이브 스크립트!!! [5] 귀찮아‡ 2007.04.19 755
393 [DX&C++] 3D를 넘어 2D로! [13] Zeprod 2007.04.11 831
392 마우스 이동 스크립트 [12] 아크로s 2007.04.08 1420
391 '에피소드'형식이 아닌 '화' 형식의 시나리오는 어떨까요? [2] 우드록맨 2007.04.03 544
390 [DX&C++] 지형을 만들어 봅시다. (Height Map) [1] Zeprod 2007.04.02 492