티스토리 툴바


posted by 얼음손 2009/04/07 02:02
요즘 수업을 들어가면, 교수님들의 취업걱정은 우리의 걱정을 뛰어있으신 듯 합니다. 여러가지 조언(?)이
때로는 수업의 절반을 차지하는 일도 다반사... 뭐, 오랜만에 Effective C++책을 펴면서, 그냥, 옛날 생각하면서, 여유롭게 프로그래밍, 아니, 코딩 하고 싶어졌습니다.
마음을 비울때 붓을 든 누군가가 있었듯이(누규?) 저는 코딩을 하렵니다.

여하튼, 예전에 VC 6.0에서 안되던 아래 코드가 VS 2005에서는 잘 돌아가는 군요.
#include "stdafx.h"

class GamePlayer
{
public:
    static const int NUM_TURN=5;
    int scores[NUM_TURN];
};
//문제.
const int GamePlayer::NUM_TURN;

int _tmain(int argc, _TCHAR* argv[])
{
    GamePlayer temp;
    temp.scores[0] = 5;
    printf("Test");
    return 0;
}

그런데 잘 돌아가는거를 넘어서, 문제라고 표시한 코드를 주석처리해도 돌아간다는거... =ㅅ=a
뭐지 도대체.
선언과 정의를 무시하는건가~ 뭐, 대충 짜도 돌아가주면 감사하긴 하지만, 이유가 알고싶네~

여하튼, 상수의 영역을 클래스로 제한하려면, 상수를 멤버로 만들어야 하고, 이 상수에 대해서 단 한개의 복사본이 있다는것을 확신하기 위해서 static을 사용합니당.ㅁ

posted by 얼음손 2007/09/23 22:14
Arr은 많은 사람들이 컴퓨터와 친구가 되기를 원했습니다. 그래서 컴퓨터 학원을 차려서 C언어를 가르치기로 결심했습니다.
학원의 이름은 Programming like a fairy tale 이었습니다. 그러나 어찌된일인지, 학원에는 유치원생들과 학부모들만 넘쳐났고, 곧 인적이 드문 학원이 되었습니다.

그리고 몇 달 후 왠 학생 하나가 찾아와서 학원에 등록했습니다. 금발머리의 외국학생이였죠. 등록한 신청서를 보니 이름이.... "Hello world"라고 되어있군요...

어쨌든, 그 학생과 Arr은 첫 수업을 시작하였습니다.
Arr은 자신이 그 동안 조금씩 써왔던 책인 "The C like a fairy tale"을 학생에게 보여주고, 강의를 했습니다.
그리고 몇 시간 후 바로 첫 프로그램을 짜면서 실습을 하였습니다.

/*1*/#include <stdio.h>
/*2*/void main()
/*3*/{
/*4*/   printf("Hello world! Hi!\n");
/*5*/}

Arr은 설명하였습니다.
"첫째줄은 printf라는 함수가 stdio.h라는 사전에 정의되어 있다는 것을 컴퓨터가 알도록,
#include라는 키워드을 통해서 컴퓨터에게 알리는 거란다.
둘째줄은 이제 니가 컴퓨터에게 직접 말하는 것을 시작한다는거야. 그리고 그 시작과 끝은 각각 {, } 으로 표시한단다.
네번째 줄에 printf는 컴퓨터에게 부탁하는거지, Hello world! Hi!\n라는 문자열을 모니터에 보여달라고. "

그러자 HW(Hello world의 약어, 이하 HW)가 물었습니다.
"선생님, 문자열은 뭐죠? 그리고 \n은 뭐에요?"

선생님은 친절하게 하나하나 대답하였습니다.
"문자열은 문자를 2개이상 모아놓은걸 말한단다. 문자열을 컴퓨터에게 말할때는 " "사이에 적어넣어야 한단다, 반면에 하나의 문자는 ' '로 표시한단다.
그리고 \n는 escape문자라고 한단다. \와 몇개의 알파벳이 합쳐저서 특별한 내용을 전달한단다. 특이한 점은 \와 특정 한 문자를 합치면 두문자인데, escape문자는 두 문자를 한 문자로 본다는것이지."
 
HW는 이것저것 궁금한것이 많았지만, 수업시간이 다되어, 집에 돌아가기로 했습니다. 물론 한 무더기의 숙제와 함께 말이죠.
posted by 얼음손 2007/07/30 23:53
이 주제를 정확하게 말하면, malloc과 delete, new와 free 이런 방식으로 혼용하여 쓰지 않는다. 하는 것이다.
왜냐햐면 C++로 넘어오면서 클래스의 생성자와 소멸자가 추가되었는데, 이것은 malloc과 free에서 호출되지 않는다. 그래서 위와 같은 코드로 테스트해 보았다.
주석부분을 해제하고 컴파일하면 오류가 발생하는데, 이는 malloc이 생성자를 호출하지 않음으로 인해서, 클래스의 생성자 안에서 동적 할당하는 부분이 호출되지 않기 때문이다.

반대로 그 아래에서 new delete를 이용한 동적 할당은 정상적으로 동작한다.
결국 클래스를 동적할당할때는, 생성자와 소멸자의 정상적인 호출을 위해서 new/delete를 사용해야한다.