분류 전체보기
API 탐방 6편. 자신의 위치를 얻어오는 GetCurrentDirectory, GetModuleFileName
API 탐방 6편. 자신의 위치를 얻어오는 GetCurrentDirectory, GetModuleFileName
2012.11.18[API 탐방] 자신의 위치를 얻어오는 GetCurrentDirectory, GetModuleFileName 실행중인 파일의 현재 작업 디렉토리를 얻어오는 GetCurrentDirectory API부터 알아보도록 하겠습니다. 아래는 GetCurrentDirectory API 함수의 원형입니다. DWORD WINAPI GetCurrentDirectory(DWORD nBufferLength, LPTSTR IpBuffer) 첫번째 인수를 살펴보면 현재 작업 디렉토리의 경로가 들어갈 버퍼의 길이, 두번째 인수로는 현재 작업 디렉토리 경로를 받을 포인터가 옵니다. 반환값으로는 성공시, 작업 디렉토리 경로의 문자열 길이를 반환하며, 버퍼값이 모자랄경우 버퍼값이 반환됩니다. 실패시 0이 반환됩니다. 한번, GetCu..
C++ 강좌 17편. 예외 처리(Exception Handling)
C++ 강좌 17편. 예외 처리(Exception Handling)
2012.11.171. 예외 처리(Exception Handling) 예외 처리(Exception Handling)에서 예외(Exception)이란 프로그램 실행 도중에 일어나는 비정상적인 상황을 의미합니다. 이런 상황이 벌어질때, 이를 처리하는 과정을 예외 처리라고 합니다. 예를 들어서, 나눗셈 프로그램에서 사용자로부터 두 개의 정수를 입력받는데, 나누는 수를 0으로 입력한것과 같이 말이죠. 직접 그런 프로그램을 만들어 보도록 합시다. #include using namespace std; int main() { int a, b; cout > a >> b; cout
C++ 강좌 16편. 템플릿(Template)
C++ 강좌 16편. 템플릿(Template)
2012.11.171. 템플릿(Template)템플릿(Template)이란, 말 그대로 "형틀"이라는 의미를 지니고 있습니다. 무엇을 찍어내는 틀, 비유하자면 붕어빵 틀에 비유할 수 있습니다. 템플릿은 모양, 틀을 본을 떠 놓은것이고, 집어 넣는 재료에 따라 결과가 조금씩 달라집니다. 붕어빵 역시도, 재료만 가지고 똑같은 모양으로 찍어낼 수 있으며, 넣는 재료에 따라 내용물은 조금씩 달라집니다. 이 템플릿은, 기능은 이미 결정되어 있으나 자료형이 정해지지 않는다는 특징을 지니고 있습니다. 이제 함수 템플릿, 클래스 템플릿에 대해 알아보려고 하는데, 함수 템플릿(Function Template)은 말 그대로, 함수를 찍어내는 틀을 말합니다. 클래스 템플릿(Class Template)은 클래스를 찍어내는 템플릿이죠. 우선, ..
C++ 강좌 15편. 연산자 오버로딩(Operator Overloading)
C++ 강좌 15편. 연산자 오버로딩(Operator Overloading)
2012.11.161. 연산자 오버로딩(Operator Overloading)이번엔 함수 오버로딩, 생성자 오버로딩도 아닌 연산자 오버로딩입니다. 함수 오버로딩, 생성자 오버로딩은 함수명, 생성자명이 같으나, 인자의 자료형이나 수가 다른 함수의 선언을 허용하여 여러 기능을 가진 함수를 제공하는데, 연산자 오버로딩은 그렇다면 기존의 연산자 말고 다른 기능을 제공하는 연산자를 추가할 수 있는 것일까요? 우선 아래의 예제를 먼저 보도록 합시다.#include using namespace std; class NUMBOX { private: int num1, num2; public: NUMBOX(int num1, int num2) : num1(num1), num2(num2) { } void ShowNumber() { cout
C# 고급 1편. 레지스트리(Registry)
C# 고급 1편. 레지스트리(Registry)
2012.11.151. 레지스트리(Registry) 이번 강좌에서 다루게 될 내용은, C#에서 제공하는 레지스트리 클래스를 이용한 레지스트리 읽기, 레지스트리 쓰기, 레지스트리 관리에 대해 간단히 알아보려고 합니다. 우선 레지스트리 클래스를 이용하려면 Microsoft.Win32 네임 스페이스를 사용하여야 합니다. using Microsoft.Win32; 그리고 아래 멤버들은, 오늘 우리가 배우게될 RegistryKey 클래스의 멤버들입니다. 멤버 메서드 설명 CreateSubKey 새 하위 키를 만들거나 기존 하위 키를 엽니다. OpenSubKey 지정된 하위 키를 검색합니다. DeleteSubKey 지정된 하위 키를 삭제합니다. DeleteSubKeyTree 하위 키와 자식 하위 키를 재귀적으로 삭제합니다. GetSu..
C++ 강좌 14편. 상속 오버라이딩과 가상 함수, 그리고 다중 상속
C++ 강좌 14편. 상속 오버라이딩과 가상 함수, 그리고 다중 상속
2012.11.141. 상속 오버라이딩(Inheritance Overriding)상속 오버라이딩을 보자니, 전에 배웠던 함수 오버로딩이 생각나지 않나요? 오버로딩이 인자의 자료형이나 수가 다른 함수를 같은 이름으로 여러번 중복 정의하는 것이라면, 오버라이딩은 이미 있는 함수를 무시해버리고 새롭게 함수를 재정의하는 것이라고 말할 수 있습니다. 더 자세히 말하자면, 이 오버라이딩(Overriding, 재정의)는 부모 클래스와 자식 클래스의 상속 관계에서, 부모 클래스에 이미 정의된 함수를 같은 이름으로 자식 클래스에서 재정의 하는것을 의미합니다. (이 때, 부모의 멤버 함수와 원형이 완전히 같아야 합니다. 그리고 오버라이딩시 부모 클래스의 함수가 모두 가려집니다.) #include using namespace std; cla..
C++ 강좌 13편. 객체 배열과 객체 포인터 배열, this 포인터
C++ 강좌 13편. 객체 배열과 객체 포인터 배열, this 포인터
2012.11.131. 객체 배열(Object Array)변수 배열, 구조체 배열은 들어보셨어도 객체 배열에 대해서는 들어보셨나요? 객체 배열도 다른 배열과 마찬가지로 비슷한 형식으로 선언됩니다. (데이터 타입 대신 클래스명이 위치합니다.) 객체 배열은 아래와 같은 방법으로 쉽게 만들 수 있습니다. 클래스명 객체명[크기];아래는 Student 객체를 배열로 만들어 각각의 요소들의 이름, 나이, 학번등을 초기화하는 예제입니다. #include using namespace std; class Student { private: char name[10]; int age; int studentID; public: Student() { cout
C++ 강좌 12편. 상속(Inheritance)
C++ 강좌 12편. 상속(Inheritance)
2012.11.121. 상속(Inheritance)이란? 여러분이 알고계시는 '상속(Inheritance)'은 무엇인가요? 물론, 이미 타 언어에서 상속을 미리 만나보신 분들도 있겠지만, 아닌 분들도 계실겁니다. 상속은 "일정한 친족적 관계가 있는 사람 사이에 한 쪽이 사망하거나 법률상의 원인이 발생하였을 때 재산적 또는 친족적 권리와 의무를 계승하는 제도" 라고 네이버 사전에 정의되어 있습니다. 쉽게 말해서, 부모님이 돌아가시면 부모님의 재산을 모두 물려받게 되는거죠. 그런데, 이런 상속이 C++에서도 존재합니다. 바로 우리가 전에 배웠던 클래스에서 말입니다.예를 들어서, 사람이란 클래스와 학생이란 클래스가 있다고 가정을 해봅시다. 사람이란 클래스 내에는 이름, 나이, 취미 등과 같은 속성과 함께, 일어나기, 잠자기, ..
C++ 강좌 11편. 프렌드(friend)
C++ 강좌 11편. 프렌드(friend)
2012.11.111. 프렌드(friend) 여러분이 알고계시는 friend의 뜻은 무엇인가요? 아시고 계시듯, friend는 "친구"라는 뜻을 가지고 있습니다. C++에서에 friend도 마찬가집니다. 클래스와 클래스끼리 친구(friend)관계를 형성할 수 있습니다. A와 B란 클래스가 존재한다고 합시다. A, B 클래스 둘 다 private 멤버를 가지고 있습니다. 우리가 알고있듯, private 멤버는 외부에서 접근할 수 없습니다. 그런데, A 클래스 내에서 B 클래스를 친구로 지정하면, B 클래스는 A 클래스의 private 멤버에 직접 접근이 가능해집니다. 그러나, A 클래스에서는 B 클래스의 private 멤버에 직접 접근이 불가능합니다. A 클래스도 가능하게 해주기 위해서는, B 클래스 내에서도 A 클래스를 ..
API 탐방 5편. 윈도우를 생성하고 표시하자! CreateWindow, ShowWindow
API 탐방 5편. 윈도우를 생성하고 표시하자! CreateWindow, ShowWindow
2012.11.11[API 탐방] 윈도우를 생성하고 표시하자!CreateWindow, ShowWindow 자 먼저, CreateWindow의 함수 원형을 살펴보도록 합시다. HWND CreateWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HANDLE hInstance, LPVOID lpParam); 위 원형을 보면, 첫번째 인수에는 클래스 이름이 옵니다. 전에 RegisterClass 또는 RegisterClassEx 함수로 생성된 ATOM 클래스의 포인터, 혹은 문자열이 이곳에 위치합니다. 두번째 인자로는 윈도우의 타이틀바에 나..
C++ 강좌 10편. 참조자(Reference)
C++ 강좌 10편. 참조자(Reference)
2012.11.101. 참조자(Reference) 참조자(Reference, 레퍼런스)는 간단히 말하면 변수에 또 하나의 별명을 붙여주는 녀석입니다. 할당된 어느 메모리 공간에 이름에, 둘 이상의 이름을 부여하는 것이므로 대상이 이름이 존재하지 않을 경우에는 역시, 참조할 수 없습니다. 간단히 a란 변수에 aa라는 별명을 붙여주어 보도록 하겠습니다. int a=50; int &aa=a; 위를 보시면, a라는 변수를 선언과 동시에 50이란 값으로 초기화 되었고, 그 아래의 aa란 녀석에 a가 대입되었습니다. 한가지 특이한 점은 aa의 이름 앞에 &(주소 반환) 연산자가 붙는다는 것입니다. 이 주소 반환 연산자는 우리가 C언어에서 포인터를 공부할 때 한번 본 기억이 있죠? 물론, 변수 앞에 & 연산자가 붙으면 그 변수의 주소..
C++ 강좌 9편. Bool, Inline
C++ 강좌 9편. Bool, Inline
2012.11.091. Bool 오늘은 'Bool' 이라는 논리 자료형에 대해 알아보도록 하겠습니다. 논리, 말 그대로 참(true)과 거짓(false)으로만 구성되어 있는 자료형입니다. 이 true와 false는 논리 연산자(&&, ||, !)에서 자주 봤었죠? 과연 true과 false는 어떤값을 나타낼까요? 아래는 cout문으로 true와 false를 출력한 것입니다. #include using namespace std; int main() { cout