본문 바로가기

Programming/C&CPP

한글 윈도우즈, Visual C++ 한글 처리 방식 이 세상에는 상당히 많은 수의 문자가 존재합니다.얼핏 떠오르는 문자로 영어의 알파벳, 일본어의 히라가나와 가타카나, 우리의 한글, 중국 한자 등등 상당히 많은 수의 문자가 있습니다.C/C++에서는 기본적으로 char 형을 사용해서 문자를 표현합니다.하지만 char 형은 1바이트 크기 밖에 되지 않습니다.그래서 아무리 많이 쓰려고 발버둥을 쳐봐도 256가지(2의 8 승)의 문자밖에 표현하지 못합니다.그래서 영어와 몇몇의 기호, 숫자 만을 표현하게 했는데, 이것이 바로 ASCII 코드입니다.하지만 다양한 언어를 포괄하기 위해서는 좀 더 큰 크기가 필요하게 됩니다.크기를 잘못 잡아서 문제가 생기는 경우를 종종 발견할 수 있습니다.IPv4와 IPv6가 대표적으로 크기를 잘못 잡아서 발생한 문제입니다.이렇게 해서.. 더보기
C++ 클래스 상속 OOP의 주된 특징 중에 하나는 상속과 그를 통해 구현 되는 다형성입니다. 상속은 현실 세계에서 부모에서 자식에게 전해지는 것과 동일한 의미입니다. 부모 클래스의 정보는 자식에게 전해집니다. 상속은 기존의 클래스를 확장해서 사용할 수 있으며 클래스에 다형성을 부여합니다. 또한, 공통된 속성을 하나로 묶어줄 수 있다는 장점이 있습니다. 일반적으로 C++에서의 상속 클래스는 다음과 같이 표현됩니다. #include using namespace std; class Parent { private: int m_a, m_b; public: Parent(int a = 0, int b = 0) { m_a = a; m_b = b; } void printnum() { cout 더보기
Calling Convention(함수 호출 규약) 함수를 호출하는데는 몇 가지 지켜야 할 약속이 있습니다.변수를 어떻게 넘겨줄 것인가, 리턴값의 반환,인수로 전달한 것을 어떻게 정리할 것인가 등이 약속되어 있어야 합니다.호출하는 함수(caller)와 호출 당하는 함수(callee) 사이에는이 약속이 지켜져야 하는 것은 당연합니다.만약 이 약속이 안 맞춰지면 거의 100% 프로그램이 죽는다고 보면 됩니다.프로그램이 실행이 되면 프로세스라 칭해지며, 메모리가 할당이 됩니다.이렇게 메모리가 할당되면 힙 영역과 스택 영역이 존재하게 되는데,힙은 낮은 번지에서 높은 번지로 자라나고,스택은 높은 번지에서 낮은 번지로 자라난다고 합니다.힙과 스택의 사이에는 자유 영역이 존재하고이 자유영역이 겹치게 되면 메모리 부족이 발생합니다.함수를 호출하면 전달되는 인자나 내부의.. 더보기
C++ 클래스 생성자에서 초기화 리스트 사용해야하는 경우 C++에서는 클래스를 생성하는데 호출되는 생성자라는 특수한 형태의 함수가 있습니다. class A{}; 가 정의되어 있을때 생성자의 이름은 A(){}이고, 리턴 타입은 존재하지 않습니다. 생성자는 오버로딩이 가능합니다. 즉, 넘겨줄 인자의 형식을 달리해서 다양한 생성자를 둘 수 있습니다. 또한 생성자는 보통 다음과 같이 표현됩니다. A(int a, int b) { m_a = a; m_b = b }; 그런데 이런 방식 말고 초기화 리스트(Member Initialization List)를 사용해서 클래스를 초기화할 수 있습니다. 초기화 리스트는 다음과 같이 표현됩니다. A(int a, int b) : m_a(a), m_b(b) { //더 할 일 }; 되도록이면 초기화 리스트를 사용해서 초기화하는 것을 권장.. 더보기