본문 바로가기

c++

afx_msg의 의미 afx_msg는 MFC에서 메소드(이벤트 핸들러)를 오버라이딩 할 때 앞에 자동적으로 적히게 됩니다.afx_msg는 다음과 같이 정의되어 있습니다.#define afx_msg결론적으로 afx_msg는 아무 의미가 없는 정의입니다.afx_msg는 보통 virtual의 의미를 담고 사용합니다.virtual에 대한 내용은 아래의 링크를 통해서 확인할 수 있습니다.2014/12/03 - [Programming/C&C++] - 다형성과 가상함수부모클래스에서 virtual로 선언한 이후에 자식클래스가 구현할 수 있게 해주는 것입니다.부모만 virtual 선언하면 자식은 굳이 virtual을 선언하지 않아도 됩니다.그런데도 afx_msg를 사용하는 이유가 있습니다. 부모클래스의 메소드(함수) 중에는 virtual이 .. 더보기
[Boost] boost::lexical_cast를 사용하는 형변환 C/C++은 int 형을 std::string으로 변경하거나 std::string을 int로 변경하는 다양한 방법이 존재합니다.다만 그 방법이 직관적이지 않기 때문에 파악하기가 쉽지 않은 단점이 있습니다.C에서는 strtol(), atoi() 등의 함수가 제공이 되서 상호 변환을 할 수 있습니다.C++에서는 다음과 같은 형식으로 string을 int 형식으로 변경이 가능합니다.#include #include #include void main() { std::stringstream ssNum("5"); int i = 0; ssNum >> i; std::cout 더보기
[정렬 알고리즘] 삽입 정렬(Insertion Sort) 정렬 알고리즘인 삽입 정렬입니다.배열의 앞쪽부터 시작해서 순회하면서 정렬을 합니다.그리고 앞 부분의 정렬된 부분에서 선택된 값의 위치를 찾아서 이동시키는 알고리즘입니다.기본적으로 버블 소트나 선택 정렬보다 성능이 좋고 구현이 간편한 장점이 있는 정렬입니다.또한 추가적인 메모리가 크게 필요 없는 In-Place 알고리즘입니다.반복문을 돌리기 위한 변수와 swap을 위한 변수 정도가 추가로 필요합니다.그리고 같은 값이 있을 때 그 순서가 변경되지 않는 안정 정렬입니다.Wiki에서 확인할 수 있는 삽입 정렬의 정렬 방식입니다.http://en.wikipedia.org/wiki/Insertion_sort이 영상이 삽입 정렬의 모든 것을 보여주고 있습니다.두 번째 값부터 시작해서 각각의 값들이 앞부분의 정렬된 부.. 더보기
[Boost] Visual Studio 2013에 Boost 적용해서 개발하기 Boost를 사용하기 위해서는 기본적으로 헤더 파일(hpp 파일)을 추가해서 사용이 가능합니다.하지만 Boost의 강력한 기능을 사용하기 위해서 Boost를 빌드해서 라이브러리를 생성해서 사용합니다.Boost의 빌드 방법은 아래의 링크를 참조하면 됩니다.2015/02/07 - [Programming/C&C++] - [Boost] Boost 빌드 방법빌드가 완료된 Boost를 Visual Studio에 적용해서 사용하는 방법입니다.먼저 간단하게 Console Application을 생성합니다.예제로 작성했기 때문에 이름은 BoostExam으로 변경하였습니다.프로젝트에 맞는 이름으로 사용하면 됩니다. 기본적인 설정으로 두고 Finish를 눌러서 프로젝트를 생성합니다.Boost를 사용하기 위해서는 Includ.. 더보기
[Boost] Boost 빌드 방법 Boost는 C++ 표준이 되기 전 미래의 C++의 표준을 사용할 수 있는 라이브러리입니다.Boost에는 이미 C++ 표준 위원회의 위원들이 참여하고 있고 대부분 C++ 표준으로 채용되고 있습니다.Boost를 통해서 좀 더 쉽고 편하게 개발이 가능합니다.Boost를 사용하기 위해서는 아래 링크를 통해서 다운로드를 받습니다.http://www.boost.org/ 현재 기준으로 Boost의 버전은 1.57.0입니다.다운로드를 받고 빌드를 해서 Boost를 사용해야 합니다.Boost의 일부 기능은 헤더 파일을 추가해서 사용하기도 하지만 전체적인 기능을 사용하기 위해서는 빌드가 필요합니다.Boost를 다운 받고 압축을 해제합니다.booststrap.bat를 실행합니다.그러면 다음과 같이 b2.exe와 bjam... 더보기
wcout, wprintf 등에서 한글 출력 안될 때 해결법 유니코드 프로젝트에서 wcout이나 wprintf를 사용했을 때 한글이 출력이 안되는 문제가 생길 때가 있습니다.이럴 때 문제를 해결하기 위해서 setlocale() 함수를 사용하면 됩니다.main 함수 등에서 다음과 같이 호출하면 됩니다. setlocale(LC_ALL, ""); 이렇게 하면 시스템의 로케일을 따라가기 때문에 한글 윈도우에서 정상적으로 한글이 출력됩니다.""를 "korean"으로 변경하면 한글로 특정해서 호출할 수도 있습니다.wcout에서 한글이 정상적으로 출력되지 않을 때 다음과 같은 방법으로 처리할 수도 있습니다. std::wcout.imbue(std::locale("")); 이후에 wcout을 호출하게 되면 정상적으로 한글이 출력되는 것을 알 수 있습니다. 더보기
얕은 복사(Shallow Copy) vs 깊은 복사(Deep Copy) 객체를 생성하고 대입하게 되면 복사 생성자가 호출되어 값을 복사하게 됩니다.클래스의 복사 생성자는 별도로 정의하지 않아도 생성되는 특수한 함수입니다.이렇게 기본적으로 내부에 생성되는 복사 생성자는 int 등의 타입에는 정상적으로 동작합니다.하지만 다음과 같이 포인터 등을 사용할 경우에는 문제가 발생할 소지가 있습니다. #include #include class Person { public: Person(int nAge, char* pName) { m_Age = nAge; int nLen = strlen(pName) + 1; m_Name = new char[nLen]; strncpy(m_Name, pName, nLen); } ~Person() { if (nullptr != m_Name) { delete[].. 더보기
[C++11] 새로운 스마트 포인터 unique_ptr(auto_ptr의 대체) C++11에서 auto_ptr이 사라지고 unique_ptr이 새로 추가되었습니다.auto_ptr의 문제점에 대해서는 아래의 글을 확인하시면 됩니다.2014/12/08 - [Programming/C&C++] - 스마트하지 못한 스마트한 포인터 auto_ptrauto_ptr을 대체하는 unique_ptr에 대해서 알아보도록 하겠습니다.unique_ptr은 auto_ptr과 거의 유사한 멤버를 가지고 있습니다.동적 할당된 포인터를 받아서 해당 포인터를 핸들링하고 자동으로 메모리를 해제하는 역할까지 동일합니다.* 연산자나 -> 연산자도 auto_ptr과 동일하게 지원합니다.unique_ptr을 생성하는 코드를 보도록 하겠습니다. #include #include #include struct TestStuff {.. 더보기