C++ 템플릿은 상당히 자유롭게 코딩을 할 수 있는 "즐거움" 선사해 준다. 이런 "즐거움" 자신이 생각한게 무척 잘 돌아간는 느낌에서 온다. 그러면 이제 무척 잘 돌아간다는 "사례"를 한가지 들어 보자. 만약 자신이 문자열을 정렬하는 로직을 만들어야 한다고 가정하자. 문자열 정렬을 위해서, ① 문자열이 있어야 하고, ② 문자열이 저장된 원소의 타입을 알아야 되고, ③ 정렬 방법에 대해서 알아야 한다. 여기서 큰 문제가 하나 있다. 각 나라마다 문자열을 정렬하는 기준이 다르고, 특정 나라는 문자열을 정렬하는데, 많은 방법 들이 있기 때문이다. 이 중, ①, ② 은 원래 생각할 수 있을 법한 것이기에 크게 생각을 요구(.. 유니코드 쓰지 뭐. 아니면 UTF-8 이나..)하지 않고, ③ 의 경우.. 정렬 방..
분류 전체보기 검색 결과
public 상속의 막강한 힘은 해본 사람만이 안다. DX 리소스 매니저를 만들 었을 때, 리소스 매니저의 리소스를 상속한 버텍스와 텍스쳐 등을 다형성으로 제어 하고, 사용 할 때, public 상속은 정말 깔끔함을 선사해 준다. 이번 항목을 이런 다형성을 제어하는데 초점을 맞춘다. 예제 코드를 보자. #include class Base { public: virtual void VirFunc() const { std::cout
혹시 순수 가상 함수를 사용 해본적이 있는가? 그렇다면 어떤 함수를 순수 가상함수로 만들어서 사용 했는가? 이 번 항목에선 이런 질문들을 정리하기 위한 항목이라 봐도 좋을 듯 싶다. 질문 1. 순수 가상 함수는 무엇인가? 예를 들어라. class pure_virtual_function_class { public: virtual ~pure_virtual_function_class() = 0; }; 질문 2. 순수 가상 함수를 선언하고 정의를 작성하는 이유는? 생각해 낼 수 있는 모든 이유나 상황을 제시하라. ① 순수 가상 소멸자를 위해서 알디 시피 순수 가상 소멸자를 만들어야만 할 경우, 그 소멸자의 본체도 정의해 두어야 한다. 왜냐하면 가상 소멸자의 호출 매카니즘이 파생 소멸자에서 기본 클래스 소멸자를 ..
이번 항목은 한가지 전제를 깔고, 그 문제를 풀어보면서 "앞으로 이런 문제에 부딛쳐 힘에 지칠 때 도움이 될 것이다" 라고 이야기 한다. class BaseA { virtual int ReadBuf( const char* ); /* 우스갯소리 : 이 안에 BaseA가 있다. */ }; class BaseB { virtual int ReadBuf( const char* ); /* 우스갯소리 : 이 안에 BaseB가 있다. */ }; 이 BaseA 와 BaseB에 있는 ReadBuf 는 다른 일을 하지만 같은 시그너처를 가진 함수 이다. 이 두 클래스를 public 상속을 한 Derived 클래스를 만들고, 각기 다른 ReadBuf가 호출 될 수 있도록 오버라이드 하라. 해설 처음에 내가 생각해 낸 방법은,..
이번 항목은 "만약" 이라는 전제와 "상상" 이라는 생각을 통해, 다중 상속을 "자연스럽게 에뮬레이션" 해 보자. 라는 취지로 이야기 한다. 다음 예제코드를 보자 #include #include class A { public: virtual ~A(); std::string Name(); private: virtual std::string DoName(); }; class B1 : virtual public A { std::string DoName(); }; class B2 : virtual public A { std::string DoName(); }; A::~A() { } std::string A::Name() { return DoName(); } std::string A::DoName() { retu..
처음 코딩을 하게 되었을 때, 디버깅의 중요성에 대해서 전혀 모르고 있었다. 어느날 버그는 꼬였고, 중단점을 매우 많이 찍으면서 버그 사냥에 몰두하는 나 자신을 보게 되었다. 이것은 .. 디버깅은 정말 정말 중요하다는 사실을 깨닫게 해준 경험이였다. 디버깅을 위해 F9 키를 누르는건 친근한 작업이었고, 보다 더 한눈에 들어왔으면 좋겠다는 생각이 들기 시작했다. 결국 옵션에 이런것이 있지 않을까? 란 궁금증이 들게 되었고, ... 옵션을 가게 된다. 위 그림에서 "도구" 를 클릭한다. 위와 같은 화면이 뜨면 옵션을 클릭 한다. 다음과 같은 화면이 나오면, "디버깅 탭"으로 이동 한다. "디버깅 탭"에서 "일반 탭" 으로 이동 한다. 이 곳의 세부 설정중 "중단점과 현재 문의 전체 소스 줄 강조 표시" 를 ..
최근댓글