본문 바로가기

Programming

C++ 변환 연산자(Conversion operator) C++ 클래스에는 변환 연산자라는 특수한 형태의 함수(메소드)를 정의할 수 있습니다.이전에 포스팅한 변환 생성자와 반대되는 개념입니다.변환 생성자에 대한 설명은 아래 링크에서 확인 가능합니다.2014/12/08 - [Programming/C&C++] - C++ 변환 생성자(Conversion Constructor)변환 생성자는 일반 타입에서 클래스의 객체를 생성하는 역할을 하지만변환 연산자는 반대로 객체에서 일반 타입 값을 받을 수 있습니다.변환 연산자는 operator 타입명(); 과 같은 형태로 선언이 가능합니다. #include using namespace std; class Distance { private: int kilometer, meter; public: Distance() : kilome.. 더보기
C++ 변환 생성자(Conversion Constructor) 변환 생성자는 기본 타입을 이용해서 객체를 생성하는 생성자입니다.다음 소스 코드를 보도록 하겠습니다. #include using namespace std; class Distance { private: int kilometer, meter; public: Distance() : kilometer(0), meter(0){} Distance(int newDist) { kilometer = newDist / 1000; meter = newDist % 1000; } void PrintDistance() { cout 더보기
[정렬 알고리즘] 버블 소트(거품정렬) 버블 소트는 정렬 알고리즘의 한 종류입니다. 정렬 알고리즘은 무작위로 있는 정보를 순차적으로 재배치 시키는 것이 목적입니다. 버블 소트는 각종 정렬 알고리즘 중에서도 기본으로 여겨지는 알고리즘입니다. 정렬 알고리즘은 퀵 정렬, 삽입 정렬, 힙 정렬, 선택 정렬 등 여러가지 방법이 존재합니다. 보통은 속도가 빠른 퀵소트를 많이 사용합니다. 퀵소트를 구현하는데는 재귀 함수 방식이 많이 활용됩니다. 재귀 함수에 대한 설명은 아래 링크에서 확인 가능합니다.2014/12/04 - [Programming/C&C++] - 재귀 함수 & 재귀적 함수호출(recursive function call)그럼 본격적으로 버블 소트에 대해서 알아보도록 하겠습니다. 만약 버블 소트의 코드만 필요하다만 가장 하단의 코드를 참조하시면.. 더보기
가변 인자 함수의 사용법(vprintf, vsprintf) 가변 인자 함수의 내부 구조에 이어서 가변 인자 함수의 사용법을 보도록 하겠습니다.가변 인자 함수의 내부 구조는 다음과 같은 링크에서 확인이 가능합니다.2014/12/07 - [Programming/C&C++] - 가변 인자(Variable Arguments) 내부 구조printf와 유사한 형식으로 문자를 조립해 주는 다음과 같은 함수가 존재합니다.int __cdecl vprintf(const char * _Format, va_list _ArgList); int __cdecl vsprintf(char * _Dest, const char * _Format, va_list _Args);vprintf는 printf와 유사한 동작 방식이고 vsprintf는 sprintf와 유사한 동작 방식입니다.다음의 소스 코.. 더보기
가변 인자(Variable Arguments) 내부 구조 가변 인자 함수는 printf 같이 인자의 형식이나 수가 정해지지 않은 형식의 함수입니다. 제가 예전에 함수 호출 규약을 설명하면서 __cdecl로 호출되는 함수는 가변 인자 함수 호출 방식이라고 설명을 드리면서 호출하는 쪽에서 스택을 정리한다고 했습니다. 이유는 호출당하는 함수에서는 몇 개가 넘어오는 지 알 수가 없기 때문입니다. 혹시 모르시는 분들은 아래 링크를 확인해주세요.2014/11/25 - [Programming/C&C++] - Calling Convention(함수 호출 규약)가변 인자 함수는 말그대로 인자를 변경 가능할 수 있다는 의미입니다. 가장 자주 사용하게 되는 것은 printf류의함수가 아닐까 생각됩니다. Visual Studio에서 printf를 입력해 보았습니다. const ch.. 더보기
C++의 캐스트(Cast) 연산자 C의 타입 캐스팅(형변환)은 명시적, 암시적으로 이뤄집니다. int i = 3.5; int i = 0; double d = 3.5; i = (double)d; 암시적 캐스팅은 Data의 손실이 발생할 수 있기 때문에 문제가 될 수도 있습니다.Visual C++에서는 int i = 3.5 데이터의 손실이 있을 수 있다는 다음과 같은 경고를 보여줍니다.Warning C4244: 'initializing' : conversion from 'double' to 'int', possible loss of dataC에서의 타입 캐스팅은 너무나 유연해서 문제가 될 소지가 너무 많습니다.int형 변수의 값을 주소값을 넣는 부분에 넣을 수도 있는데 컴파일러는 군말없이 그냥 다 형변환 해줍니다.그래서 C++에서는 다음의 .. 더보기
C/C++ 포인터 기본 C/C++에서 포인터는 처음에 이해하기 어려운 개념입니다.메모리의 어느 지점을 가리키는 포인터때문에 C/C++에 흥미를 잃고는 합니다.사실 포인터는 하나의 타입일 뿐입니다.C를 처음 공부할 때 쓰는 scanf()를 사용할 때는 printf()와는 다르게 변수명 앞에 &를 붙입니다. 이 &가 변수의 주소값을 나타내다는 것을 알고 있습니다.포인터는 바로 이런 메모리의 주소를 저장하는 타입입니다.변수는 메모리의 영역에 붙어있는 이름입니다. 변수가 선언되면 다음과 같이 메모리 영역이 확보가 됩니다.int형 변수를 선언하면 이렇게 4바이트의 메모리가 할당됩니다.포인터의 선언은 타입명* 변수명;의 형태로 선언합니다.포인터는 흔히 후라이팬과 손잡이로 표현이 많이 되곤 합니다.후라이팬의 중심부는 실제 할당된 메모리로 .. 더보기
64비트 Windows 환경에서의 int 사이즈 일반적으로 32비트 환경에서와 64비트 환경에서 int, long 형의 크기가 달라지는 것으로 생각을 합니다. 32비트에서는 32비트인 4바이트, 64비트에서는 8바이트로 변경되는 것으로 알고 있지만 실제로는 int, long형은 Windows 환경에서는 4바이트로 동일한 크기입니다. Linux 환경에서는 long형만 8바이트로 변경된다고 합니다.int가 4바이트기 때문에 실제 8바이트의 int를 사용하기 위해 Windows에서는 __int64를 사용하시는 것이 좋습니다.또한 4바이트 int인 __int32도 정의되어 있습니다.그렇기 때문에 정확한 구분이 필요하다면 __int64와 __int32를 구분해서 사용하면 됩니다.64bit와 32bit에 따라서 8바이트에서 4바이트로 크기가 변경되는 타입은 포인.. 더보기