Programming 썸네일형 리스트형 클래스와 static static은 변수를 전역변수와 같이 데이터 영역에 저장하여 프로그램이 종료되기 전까지 변수가 메모리 공간에서 소멸 되지 않지만, 전역변수와 달리 static 변수는 지역변수 처럼 해당 함수에서만 사용이 가능했다.프로그래밍을 하다보면 전역변수를 사용해야 하는 순간이 있지만 원하지 않는 순간에 해당 변수에 접근이 가능 하기 때문에 안정성이 떨어지게 된다.만약 각각의 객체에 순서를 먹이고 싶은 경우에 static변수를 이용하여 다음과 같이 사용이 가능하다.#include using namespace std; class Person{ static int count; char *name; int age, num; public: Person(char* _name, int _age){ name = new char[.. 더보기 클래스와 const const 멤버함수클래스의 멤버함수가 멤버변수의 값을 수정하는 것을 방지 하기위해 쓰인다.또한 멤버함수는 상수화된 멤버함수가 아닌 함수를 호출 할 수 없으며, 멤버변수의 포인터를 리턴하는 것 또한 불가능하다. 형태는 위와 같으며, 이는 const 멤버함수가 멤버변수를 조작하는 것을 방지 하기 위함인데 예를들어 상수화 되지 않은 멤버함수가 멤버변수를 조작 할 수 있는데 호출 하는 경우나, 리턴된 멤버변수의 포인터가 가리키는 데이터를 조작 할 수 있기 때문이다. 그렇기 때문에 const 멤버함수에서 다른 함수를 호출 하기 위해서는 그 함수 또한 const를 통해 상수화 하여야 한다.또 포인터를 리턴하기 위해서는 위 처럼 const를 앞에 붙여 리턴형 또한 상수화 시켜서 멤버변수를 수정하지 못하도록 해야 한다.. 더보기 복사생성자와 얕은복사 복사생성자클래스를 선언할때 생성자에서 요구하는 멤버변수가 아닌 경우 에러를 발생한다.이는 당연한 것인데 아래와 같은 경우 에러를 발생시키지 않고 실행이 된다.코드의 내용과 출력결과를 보면 객체의 멤버변수의 내용을 복사해 온 것을 알 수 있다.자기자신과 같은형태의 클래스를 인수로 받을 수 있는 것을 복사 생성자라고 하며, 위에서 따로 생성자를 만들어 주지 않아도 알아서 내용을 복사 한 것은 클래스의 멤버 변수 대 멤버 변수의 복사를 수행하는 디폴트 복사 생성자가 있기 때문이다.사실은 이러한 형태의 복사 생성자가 클래스의 형태에 따라 각각 있는 것이다. 얕은 복사로 인한 문제이렇게 봤을때는 디폴트 복사 생성자가 알아서 멤버변수들을 복사 하기 때문에 복사생성자를 사용자가 입력 할 필요가 없을 듯 싶지만 디폴트.. 더보기 friend 선언 class에서 private으로 변수를 선언하게 되면 외부에서 내부 멤버변수로 접근 할 수 없게 된다.그래서 외부에서 클래스의 멤버변수에 접근 하기 위해서는 함수를 이용하여야 했고, 이는 정보 은닉이라고 하였다.그런데 클래스에 직접 접근하는 방법이 있는데 그것은 friend라는 예약어를 통해서 가능하다.클래스에서 public으로 전역 함수나 클래스를 앞에 friend 예약어를 붙이고 정의 하게 되면 외부에서 접근이 가능해진다. 위 그림을 보면 전역함수인 setData를 통하여 클래스의 멤버변수를 초기화하는 것을 볼 수있다.클래스 또한 저러한 형태로 friend 선언이 가능하며, 클래스AAA에 클래스BBB를 friend 선언하면 BBB에서는 AAA의 private에 접근이 가능하게 되지만 그 반대는 불가능.. 더보기 class의 정보은닉과 캡슐화 클래스는 기본적으로 관련된 변수들을 묶는 구조체와 함수를 함께 묶은 것을 말하며, 보통 정보은닉과 캡슐화라는 개념을 중요시 한다. 정보은닉외부 객체에서 내부 객체의 멤버변수에 직접 접근하게 되어 생기게 되는 문제를 해결 하기 위해 쓰인다.멤버 변수의 데이터에 접근 하기 위해 직접 접근 하는 것이 아닌 관련 함수를 이용하여 접근 하도록 하는 것이다.이는 함수에서 필요로 하는 데이터를 걸러서 받을 수 있게 되어 컴파일 단계에서 생기는 오류가 아닌 데이터의 오류에 의한 잘못된 오류의 발생을 방지 할 수 있다. 캡슐화캡슐화는 관련 데이터와 관련 함수를 함께 묶는 것을 말한다.이는 서로 다른 클래스의 함수에서 다른 멤버 변수로 접근 하는데 생기는 불필요한 데이터 복사를 방지 할 수 있게 된다.또한 객체가 여럿이 .. 더보기 reference와 pointer의 차이 레퍼런스와 포인터가 값을 복사하여 사용하는 call-by-value 방식이 아닌, 직접 해당 변수에 접근하여 값을 사용하는 call-by- reference 방식이라는 점에서 비슷하다.이 둘이 서로 어떻게 다른가 하면 포인터는 해당 변수의 주소값을 저장하여 해당 주소값에 있는 변수의 값에 접근하는 방식이고, 레퍼런스는 해당변수에게 새로운 이름을 부여한다고 생각하면 된다. 위 그림을 보게되면 a라는 정수형 변수와 rA라는 레퍼런스의 주소값이 서로 같다는 것을 알수가 있다.이 것은 0x00bdfa38이라는 주소에 정수형의 변수 a가 0으로 초기화 되었고, rA라는 다른 이름을 받았다고 해석 할 수 있는 것이다.포인터를 사용하는 경우 잘못된 사용을 통해서 잘못된 주소를 가리켜 에러를 발생 시키는 경우가 종종 .. 더보기 malloc과 free C언어에서는 malloc과 free를 이용하여 메모리 동적 할당을 하게 됩니다. 동적할당이란 메모리를 정해서 정적으로 쓰는 것이 아닌 상황에 따라 동적으로 사용하는 것을 의미 하며, 메모리중 stack 영역이 아닌 heap영역에 데이터를 저장 하도록합니다. malloc의 함수 원형은 void* malloc( size_t ); 으로 데이터를 저장하는 메모리의 주소를 반환합니다. free의 함수 원형은 void free( void * ); 으로 malloc을 이용하여 동적할당해준 후에는 free함수를 이용하여 메모리 영역을 해제 해 주어야 합니다. 사용시에는 다음과 같은 방법으로 사용됩니다. #include #include int main(void){ int *pi; char **pstr; pi = (int.. 더보기 keybd_event() keybd_event()는 키보드 메시지를 생성해주는 함수.필요로 하는 헤더와 함수 원형은 다음과 같다.#includeVOID WINAPI keybd_event( _In_ BYTE bVk, // 가상 키코드 _In_ BYTE bScan, // 하드웨어 스캔 코드 _In_ DWORD dwFlags, // 동작 지정 Flag _In_ ULONG_PTR dwExtraInfo // 추가 정보 );bVk - 사용방법은 가상 키코드 같은경우에는 다음 msdn 페이지에서 모두 잘 알려주고 있다.Virtual-key code - http://msdn.microsoft.com/ko-kr/library/windows/desktop/dd375731(v=vs.85).aspxdwFlags - 0을 넣을 경우 keydown, 0.. 더보기 _beginthreadex함수 #include uintptr_t _beginthreadex(void *security, unsigned stack_size, unsigned (*start_address)(void*), void *arglist, unsigned initflag, unsigned *thraddr); 인 자설 명 1 void *security쓰레드의 보안관련정보 전달(필요없으면 NULL) 2unsigned stack_size스택의 크기전달(기본 크기 1MB로 설정하려면 0) 3unsigned (* start_address)(void*)쓰레드 시작함수 주소 전달 4void *arglist함수호출시 전달하고 싶은 인자 5unsigned initflag쓰레드의 생성 이후의 행동을 결정. 0을 전달하면 생성과 동시에 실행된다 6.. 더보기 스레드 생성 함수 API에서 사용되어지는 스레드를 생성하는 함수는1. CreateThread() 2. _beginthread()3. _beginthreadex()3가지이다. CreateThread()WinAPI 전용 함수로 return값으로 HANDLE 타입을 반환한다. 순수하게 스레드를 생성하는 기능만 담당한다.CreateThread함수가 WinAPI 전용 함수이기에 c,c++런타임 라이브러리 함수를 이용할 경우에 c,c++함수는 실행하지 않고 스레드가 죽어버린다.WinAPI함수만 호출 할 때에는 상관이 없지만 c,c++ 같은 형태의 함수를 사용할 수 없기에 스레드 생성시 CreateThread()함수를 권장하지 않는다고 한다.종료시는 먼저 CloseHandle()을 이용해 핸들을 닫고 ExitThread()를 통해 종.. 더보기 이전 1 2 3 다음