본문 바로가기

Category

항목 9. 객체 생성 및 소멸 과정중에는 절대 가상 함수를 호출하지 말자!!! 일단은 객체의 생성 과정중에 가상함수를 호출 하면 어떤일이 발생하는지 알아 보겠는데, 그전에 객체의 생성과정중 객체 생성 순서를 알아 보도록 하겠습니다. #include using namespace std; class Base { public: Base(){cout 더보기
항목 8. 예외가 소멸자를 떠나지 못하도록 붙들어 놓자 #include #include using namespace std; class DBConnection { public: //DBConnection 객체를 반환하는 함수. static DBConnection create() { cout 더보기
[EC++] 항목 7. 다형성을 가진 기본 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자. Effective C++에 있는 내용이라고 겁먹지 말자. 우리는 이미 이 내용을 제가 C++ 포스팅 하면서 언급을 한 적이 있습니다. 왜 다형성을 가진 기본 클래스에서는 소멸자를 가상 소멸자로 써야 하는가? 우선 다형성과 그 이유에 대해서 먼저 보시죠. 다형성 이란? Virtual 소멸자 위 두 포스팅만 보더라도 왜 가상 소멸자를 쓰는지 이유는 충분히 알 수 있을 것입니다. 가상 함수를 C++에서 구현하려면 클래스에 별도의 자료구조가 하나 들어가야 합니다. 이 자료구조는 프로그램 실행 중에 주어진 객체에 대해 어떤 가상 함수를 호출해야 하는지는 결정하는 데 쓰이는 정보인데, 실제로는 포인터의 형태를 취하는 것이 대부분이고, 이를 가상 함수 테이블 포인터(Virtual table pointer) 즉, vp.. 더보기
Doxygen, C/C++외의 코드 문서화 도구 Doxygen은 주어진 소스 코드를 분석하고 소스 코드에 있는 특정한 형식의 주석을 이용해서 소스 코드를 자동으로 문서화해주는 프로그램이다. 결과는 일련의 HTML 페이지들이구, LATEX나 PDF 문서들을 만들어낼 수도 있다. 일단 Doxygen을 설치 하기 전에 아래와 같이 해당 문서에그래프 다이어그램도 만들기 위해서는 Graphviz의 Graph Visualization Software를 설치할 필요가 있다. graphviz-2.26.3 다운 받으러 가기 이 사이트에 접을 하면 위와 같이 첫 화면에서 current stable release 부분에서 다운을 받을 수 있다. graphviz-2.26.3.msi 이라는 파일 이름으로 다운이 받아졌을 것이다. 다운 받고 아무 폴더에 깔아 주기만 하면 된다.. 더보기
DirectX SDK 설치, Visual Studio 환경설정 DirectX 9.0을 이용한 프로래밍을 위한 환경 구축에 앞서, 당연히 우선 DirectX SDK(Software Development Kit)을 받아야 합니다. 저는 Feb2010을 쓰겠습니다. Microsoft 홈페이지 다운받으러 가기 용량이 크므로, 받는데 시간이 좀 걸립니다. 우선 파일을 다운 받았으면 설치를 해야 겠죠? 설치 파일을 누르면 아래와 같이 뜹니다. 넘겨 주시고, License Agreement 도 가뿐하게 동의~ 이건뭐 상관이 없으니 No를 선택하고 다음으로 넘어 갑니다. 무엇을 깔지 선택합니다. 뭐 손 안대는 것이 좋겠죠. 요즘은 고용량 시대이니 다 깔아 줍니다. 이후에 폴더 선택 하는 부분이 있는데, 제가 이미 깔려진 상태에서 스샷을 찍어서 그 부분은 자동적으로 넘어 가더군요... 더보기
비주얼 스튜디오(Visual Studio) 2010 - Header, Library 전역 설정 우선 Visual Studo가 2010으로 오면서 2008까지 있던 헤더 파일과 lib 파일들의 전역 경로 설정이 없어졌다. (원래는 Tool -> Option에 있었지만, 2010에서는 먹히지 않는다.) 그래서 2010을 사용하면, 매번 Include와 Library 경로를 설정해야 하는 번거로움이 부가적으로 붙게 되었다. 하지만, 이전처럼 전역으로 설정하는 방법이 있다. 그림만 봐도 이해하기 쉬울 것이다. 우선 Solution Explorer를 보면 밑에 Property Manager가 있다. 이 Property Manager에 가보면 Debug | Win32 와 Release | Win32가 보일 것이다. Debug의 하위 메뉴를 보면 여러가지가 나오는데 그 중 Microsofr Cpp Win32... 더보기
[C++] 형변환 (Typecasting) - const_cast, reinterpret_cast, static_cast, dynamic_cast 형변환 (Typecasting) : 그동안 명시적인 형변환을 할때는 괄호를 사용했었는데 C++에서는 이를 대체 할 수 있는 4가지 종류의 형변환 연산자가 추가 되었다. 그럼 그동안에 사용했던 명시적 형변환을 계속 쓰지 않고 새로운 형변환 종류가 추가 되었을까? 일단 기존의 C 스타일 형변환은 두가지 문제점이 있다. 첫번째는 C 스타일의 형변환(컴파일 타입 형변환)은 눈에 잘 띄지도 않고 찾아내기 힘이 든다는 점이다. 사용자가 프로그램을 짜다 보면, 형변환 말고도 괄호를 사용하는 부분이 많기 때문이다. 뭐 눈에 잘 안띈다고 단점이될까? 명시적 형변환을 수행한다는 것은 암시적인 형변환이 불가능하다는 뜻이고, 암시적인 형변환이 불가능하다는 것은 컴퓨터가 생각하기에는 문제의 소지가 있다는 뜻이다. 다음으로 C .. 더보기
[C++] 예외(Exception) 처리 try, catch, throw 예외 처리 : 예외란 무엇인가? 예외란 일반적이지 않는 상황을 말하는 것이다. 에러가 아니라는 말이다. 이런 일반적이지 않은 프로그램의 흐름을 처리 하는것을 예외 처리 라고 한다. Try, Catch, Throw : 일단 예외를 처리 하려면, 그에 맞는 문법을 써야 할 것이다. try { //예외 발생 예상지역 } catch(처리되어야할 예외의 종류) { //예외를 처리하는 코드가 존재할 위치 } 위는 try, catch 문이다. try에는 예외라 불릴 상황을 가진 문장을 집어 넣는 것이다. (try 문은 무조건 실행이 된다.) 처리되어야 할 예외의 종류를 받아 catch 문에서는 이 예외에 대한 처리를 해주는 것이다. (명시적으로 cout문을 이용해 예외가 발생했다고 처리해 주거나 한다) if ( 조건.. 더보기
[C++] 함수 템플릿? 템플릿 함수? 템플릿의 동작원리는 함수 오버로딩(Function Overloading)과 유사한 형태로 구성이 된다. 다음 템플릿화된 소스코드를 보자. #include using namespace std; template T Add(T a, T b) { return a+b; } void main() { cout 더보기
[C++] 함수 템플릿과 클래스 템플릿 (Function template & Class template) 함수 템플릿 템플릿의 종류에는 함수 템플릿, 클래스 템플릿 이 두가지로 나뉠 수 있다. 책마다 함수 템플릿 또는 템플릿 함수로 이 두가지로 표기가 되어 있는데, 이런 명사 두개가 오는 단어들은 뒤에가 진짜다. 우선 함수 템플릿, 템플릿 함수의 의미를 정리 해보자. - 함수 템플릿 : 함수를 기반으로 구현이 된 템플릿 (함수가 아니라는 뜻이다) - 템플릿 함수 : 템플릿을 기반으로 한 함수라는 뜻 우리가 앞서 본 템플릿 예제는 함수 템플릿이다. 이 함수 템플릿에 대해 좀 더 자세히 알아 보자. 둘이상의 타입에 대한 템플릿 #include using namespace std; template // 함수 템플릿 정의 void ShowData(T a, T b) { cout 더보기