분류 전체보기
C++ 강좌 8편. 생성자와 소멸자(Constructor and Destructor)
C++ 강좌 8편. 생성자와 소멸자(Constructor and Destructor)
2012.11.081. 생성자(Constructor) 오늘은 객체 생성/소멸시에 호출되는 생성자와 소멸자에 대해 알아보도록 하겠습니다. 우리는 바로 전 강좌에서, private로 지정된 필드(=멤버 변수)를 초기화 시키기 위하여 SetInfo 함수를 따로 만들어 초기화 시켜주었습니다. 그런데, 이것보다 더 편하게 객체 생성과 동시에 초기화 시켜주는 녀석이 있습니다. 그 녀석이 바로 생성자라는 녀석입니다. 아래는 생성자의 형식입니다. class 클래스명 { public: 클래스명(매개변수..) { // ... } // .. } 위의 형식을 보시면, 생성자를 정의할때 생성자의 이름이 클래스의 이름과 같습니다. 생성자도 함수와 같이 매개변수를 가질 수 있습니다. 그리고 반환형이 없습니다. 한번 SetInfo 함수 대신 생성자를..
C++ 강좌 7편. 클래스(class)
C++ 강좌 7편. 클래스(class)
2012.11.041. 클래스(class) 클래스란 무엇일까요? 다른 언어를 공부하시다가 '클래스(class)'라는 말을 들어보신 분도, 그렇지 않은 분도 계실겁니다. C++의 클래스는, 쉽게 말하자면 C의 구조체에서 확장된 C++의 구조체의 또다른 이름입니다. 클래스는 변수와 함께 함수까지도 포함시킬 수 있습니다. 그럼, C++의 구조체와 클래스는 다른게 무엇인가요? 라는 궁금증을 품고 계시는 분들도 있을텐데, 구조체와 클래스의 차이점은 기본 접근 제한자의 차이일뿐, 그 이상 다른게 없습니다. 구조체 같은 경우는 기본 접근 제한자가 public이며, 클래스의 기본 접근 제한자는 private으로 제한되어 있습니다. '둘다 동일한 기능을 하면서도 왜 사라지지 않을까요?'에 대한 답은, C언어와의 하위 호완성을 위해서 남겨..
C++ 강좌 6편. 구조체의 확장
C++ 강좌 6편. 구조체의 확장
2012.11.011. C언어의 구조체C언어의 구조체를 다시한번 살펴보도록 합시다. 우리는 C언어 12강에서 구조체를 사용하여 관련있는 변수들끼리 묶어 손쉽게 관리를 할 수 있었습니다. 예를 한번 보도록 합시다. #include struct student { int id; char *name; float percentage; }; // 구조체 뒤에 세미콜론이 와야함 int main() { struct student s={1, "김철수", 90.5}; printf("아이디: %d \n", s.id); printf("이름: %s \n", s.name); printf("백분율: %f \n", s.percentage); return 0; } 결과: 아이디: 1 이름: 김철수 백분율: 90.500000 계속하려면 아무 키나 누르십..
C++ 강좌 5편. new, delete [최근 수정 2017.10.10]
C++ 강좌 5편. new, delete [최근 수정 2017.10.10]
2012.10.281. C언어의 malloc & free우리가 C언어를 배울 때, malloc과 free란 녀석은 이미 만나본 적이 있습니다. malloc이란 함수는 '힙 영역에 메모리 공간을 할당할 수 있게 도와주는 함수'라고 말했었고, free 함수는 'malloc 함수 호출 시 할당되었던 메모리 공간을 전부 해제할 수 있게 도와주는 함수'라고 말한 적이 있었습니다. C언어 11강에서 보았던 예제를 다시 한번 보도록 하겠습니다. #include #include int main() { int studentNum, totalScore=0; int* studentScore; int i; printf("학생 수를 입력하세요: "); scanf("%d", &studentNum); studentScore = (int *)mall..
C++ 강좌 4편. 함수 오버로딩(Function Overloading) [최근 수정 2017.10.10]
C++ 강좌 4편. 함수 오버로딩(Function Overloading) [최근 수정 2017.10.10]
2012.10.281. 함수 오버로딩(Function Overloading)함수 오버로딩(Function Overloading)이란, 함수명은 같으며 인자의 자료형이나 수가 다른 함수의 선언을 허용하는 것을 말합니다. C에서는 함수 오버로딩을 허용하지 않았지만, C++에서는 아래와 같이 두 함수의 이름이 같아도 컴파일러가 오류를 발생시키지 않습니다. #include using namespace std; void func(int a) { cout
C++ 강좌 3편. 네임스페이스(namespace) [최근 수정 2017.05.21]
C++ 강좌 3편. 네임스페이스(namespace) [최근 수정 2017.05.21]
2012.10.251. 네임스페이스(namespace)네임스페이스(namespace)란 뭘까요? 이름 공간? 이 네임스페이스에 대해 알아보기 전에, 간단한 예를 하나 들어보겠습니다. 약 10명 정도의 개발자가 A, B라는 팀으로 나누어 어떤 팀 프로젝트를 진행한다고 가정해봅시다. 이렇게 팀을 나누어 개발이 모두 끝나면, 팀 A와 B가 개발한 프로젝트를 하나로 합친다고 해봅시다. 그렇게 해서 프로젝트를 합치고, 모든 일이 만사천리로 해결되는 듯 하였으나 A에서 정의한 함수의 이름과 B에서 정의한 함수의 이름 상당수가 동일하여 충돌이 일어나는 것이었습니다. A.h: ... namespace A { void doSomething(void) { // 코드... } }; ... B.h: ... namespace B { void d..
C++ 강좌 2편. 기본 입출력 함수 둘러보기 [최근 수정 2017.05.20]
C++ 강좌 2편. 기본 입출력 함수 둘러보기 [최근 수정 2017.05.20]
2012.10.23이번 강좌에서는 C++에서 각각 입력과 출력을 담당하는 cin, cout 객체에 대해서 알아보도록 할 것입니다. 강좌를 시작하기 전에, 이 강좌는 첫 강좌에서 말씀드렸듯이 C를 알고 있다는 전제하에 강좌를 진행합니다. 추후에, C 강좌와 C++ 강좌를 분리하여 C를 모르더라도 C++만 배울 수 있도록 강좌를 재구성시킬 예정에 있습니다. 자료형에 대해서 아직 잘 모르신다면, 이 강좌를 읽기 전 이곳을 참조하시는 것이 좋습니다. 1. cout (console out)먼저, cout 객체 부터 보도록 할텐데, 제일 처음 만나볼 cout 객체는 C언어의 출력 함수인 printf()와 흡사합니다. 바로 보도록 할까요? 아래 예제 코드를 따라 작성하여, Ctrl+F5를 누르거나 '디버그(D)->디버그 하지 않고 시..
C++ 강좌 1편. 새로운 시작, 컴파일러 소개 [최근 수정 2017.05.19]
C++ 강좌 1편. 새로운 시작, 컴파일러 소개 [최근 수정 2017.05.19]
2012.10.212012년에 올렸던 C++ 강좌를 다시 재구성한 뒤, 2017년에 C++11/14 에서 추가된 기능을 포함하여 강좌를 다시 쓰게 되었습니다. 이 강좌는 여러분들이 C언어를 알고 있다는 가정하에 진행됩니다. 즉, C언어 강좌를 진행할 때 설명해 드린 변수나 분기문, 반복문 등은 이 강좌에서 다루지 않습니다. 'C언어에서 어떻게 달라졌는가?'를 중점으로 강좌가 진행되니 이점 유의해주시기 바랍니다. 1. 새로운 시작 C++에서는 C의 절차와 구조에 중심을 둔 절차지향 프로그래밍을 떠나서, 객체지향이라는 개념이 도입되었습니다. 시간이 지나며 복잡성이 커지고, 소프트웨어가 하드웨어의 발달을 전혀 따라가지 못하며 절차지향 프로그래밍이 한계를 드러내자, 객체지향 프로그래밍이 수면 위로 부상하기 시작했습니다. 객체지향..
API 탐방 4편. 윈도우의 캡션을 설정하거나 가져오는 SetWindowText, GetWindowText
API 탐방 4편. 윈도우의 캡션을 설정하거나 가져오는 SetWindowText, GetWindowText
2012.10.21[API 탐방] 윈도우의 캡션을 설정하거나 가져오는SetWindowText, GetWindowText 자, 먼저 SetWindowText API 함수와, GetWindowText API 함수의 원형부터 살펴보도록 합시다. BOOL SetWindowText(HWND hWnd, LPCTSTR lpString); int GetWindowText(HWND hWnd, LPTSTR lpString, int nMaxCount); 제일 처음 SetWindowText의 원형 부터 살펴보자면, 첫번째 인수로는 윈도우 또는 컨트롤의 핸들이 옵니다. 그러나, 다른 응용 프로그램에서 컨트롤의 캡션은 변경할 수 없습니다. 두번째 인수로는 바꿀 문자열을 말합니다. 반환값으로는 실패하면 0이 오며, 성공하면 0이 아닌값이 옵니다. ..
API 탐방 3편. 특정 윈도우의 핸들에 메시지를 전달하는 SendMessage
API 탐방 3편. 특정 윈도우의 핸들에 메시지를 전달하는 SendMessage
2012.10.21[API 탐방기] 특정 윈도우의 핸들에 메시지를 전달하는SendMessage SendMessage API에 대해 알아보기 전에, SendMessage의 함수 원형을 먼저 살펴보도록 합시다. LRESULT SendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); 원형을 살펴보자면, 첫번째 인수로는 메시지를 전달받을 윈도우 핸들을, 두번째 인수로는 전달할 메시지를, 세번째 인수로는 메시지의 부가 정보라고 말할 수 있겠습니다. 전달하는 메시지에 따라 의미가 달라집니다. 네번째 인수 역시도 메시지의 부가 정보이며, 세번째와 네번째에 있는 wParam, IParam의 기본값은 0입니다. 반환값으로는 전달되는 메시지에 따른 처리 결과가 반환됩니다. 이 Sen..
API 탐방 2편. 키의 상태를 확인하는 GetKeyState, GetAsyncKeyState
API 탐방 2편. 키의 상태를 확인하는 GetKeyState, GetAsyncKeyState
2012.10.20[API 탐방기] 키의 상태를 확인하는GetAsyncKeyState, GetKeyState 우선은 GetAsyncKeyState API에 대해 알아보기 전에 API의 원형을 먼저 살펴봅시다! SHORT GetAsyncKeyState(int vKey) 반환값은 SHORT형이고, 첫번째 인수로는 가상 키코드가 오며, 우리가 만약 VK_UP을 넘겨주면, 방향키 중 위를 가르키는 키가 눌려있나 눌려있지 않나 확인할 수 있습니다. (키가 눌려진 상태에서는 최상위 비트(0x8000)이 1이 되며, 처음 입력되었을 때는 0x8001 비트가 1이 됩니다.)(가상 키코드 목록을 보고싶으신 분들은 아래의 MSDN를 방문하셔서 참고하세요.)MSDN: http://msdn.microsoft.com/en-us/library/w..
API 탐방 1편. 최상위의 핸들을 찾는 FindWindow
API 탐방 1편. 최상위의 핸들을 찾는 FindWindow
2012.10.20[API 탐방기] 최상위의 핸들을 찾는FindWindow 먼저, FindWindow API에 대해 알아보기 전에 이 API의 원형을 한번 살펴보도록 합시다. HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName); 원형에서 첫번째 인수를 먼저 살펴보면, IpClassName이 있는데, 우리가 검색 시에 사용할 윈도우의 클래스 이름을 말합니다. 만약 NULL이라면 모든 윈도우의 클래스를 검색하게 됩니다. 두번째 인수에서 IpWindowName은 윈도우의 제목을 말합니다. 이것 역시 NULL이면 모든 제목의 윈도우를 검색하게 됩니다. (대소문자는 구분하지 않습니다. 또한 부분 검색은 되지 않으며 완벽하게 일치해야만 합니다.) 만약 검색에 성공했으면 FindW..