[C++] 가상 함수(Virtual Function)

가상 함수는 객체 지향 프로그래밍에서, 상속 받는 클래스 내에서 오버라이딩 될 수 있는 함수입니다.virtual 키워드를 붙여 사용가능합니다.virtual을 붙이면 파생 클래스에서 재정의할 것으로 보이는 멤버 함수를 의미합니다. 사용 방법은 아래와 같습니다. 우선 아래 코드를 보며 virtual이 없는 상태에서 동작을 설명하겠습니다. CParent를 상속받은 CChild 클래스가 있고, main 함수에서 CChild를 생성 하고 CParent *형으로 주소를 받습니다.pParent에서 Print 함수를 … Read more

[C++] 자료형과 범위 – sizeof

C++에서 사용하는 데이터 형식의 종류(자료형)와 그 값의 범위는 아래와 같습니다. 해당 값은 아래 코드와 같이 sizeof로 확인이 가능합니다. 일반적으로 데이터를 표현할 때 데이터 비트 수가 n개이면 2의 n승까지 데이터 표현이 가능합니다.예를 들어 unsigned char의 경우 8bit(=1Byte)이기 때문에 2의 8승, 즉 0 ~ 255까지 표현이 가능한 것입니다. 하지만 부호가 있는 signed 자료형을 표현할 때는, 아래 그림과 … Read more

[C++] template, 템플릿 사용 예제 – 2. 클래스 템플릿

이번 글에서는 클래스 템플릿에 대해 알아보겠습니다. 클래스 템플릿도 함수 템플릿처럼 만드시면 됩니다. 클래스 멤버 변수나 함수에 템플릿을 지정해주셔서 위와 같이 사용하시면 됩니다.만약 클래스 내부에 멤버 함수를 선언하고, 외부에 멤버 함수를 정의하면 아래와 같이 코딩해야 합니다. 템플릿 매개변수를 여러 개 지정할 수 있습니다. 템플릿 매개변수 T 이외에 다른 템플릿 매개변수를 추가하고 싶으시면 아래와 같이 작업합니다. 전체 … Read more

[C++] template, 템플릿 사용 예제 – 1. 함수 템플릿, 특수화

template는 매개변수의 타입에 따라 함수나 클래스를 생성하는 C++의 일반화 프로그래밍의 메커니즘입니다.template를 사용하면 같은 작업, 다른 매개변수에 따라 동작하는 함수나 클래스를 한번에 정의할 수 있습니다. 함수 템플릿은 다음과 같은 방식으로 사용합니다. typename키워드 대신 class 키워드를 사용하셔도 됩니다.(C++ 98 부터 typename 키워드 추가됨) 아래 예제는 두개의 매개 변수의 합을 표시하는 Sum 함수를 template로 작성한 것입니다. 위 함수를 … Read more

[C++] 함수 오버로딩(Function Overloading)

안녕하세요 이번 글에서는 함수 오버로딩에 대해 알아보겠습니다. 우선 아래 코드의 문제점을 무엇일까요? swap(&c, &d);를 보시면 double형 주소를 인자로 전달합니다. 하지만 swap 함수는 int 포인트로 인자를 받으므로 “double *”가 “int *”로 형변환이 되지 않아 에러가 생깁니다. 그렇다고 아래와 같이 강제 형변환을 할 수도 없는 노릇입니다. C++에서는 같은 이름의 함수가 여러 개 올 수 있는데, 이것을 함수 오버로딩(function overloading)이라고 … Read more

[C++] tolower, toupper 대소문자 변환

안녕하세요 오늘은, C++의 대소문자 변환하는 함수 tolower, toupper 함수를 알아보겠습니다.tolower, toupper함수는 인자로 1개의 아스키 코드 값을 전달 하면 해당 문자의 대소문자를 변환해 줍니다. 대문자 -> 소문자로 변환하는 tolower의 함수 원형은 아래와 같습니다. msdn에서는 tolower을 수행하기 위해서 __isascii 함수와 isupper 함수를 수행해야 개발자가 예상되는 결과를 제공한다고 합니다. msdn을 참고하여 함수를 만들면 아래와 같습니다. acStr에서 ASCII이고 대문자인 “~hELlo WorLd!”만 변환 됩니다.(굵은 글자)소문자 … Read more

[C++] namespace

처음에 개발을 배우면 아래와 같이 둘중 하나를 가지고 코딩하게 됩니다. 또는 저는 std:: 쓰는게 싫어서 using namespace std;를 많이 사용했습니다.이 namespace는 왜 쓰는 걸까요? namespace는 코드 영역을 정의하기 위해 사용합니다. 아래 코드를 보시죠. 아래의 두 Sum 함수가 있다고 합니다. 이 두 헤더 파일을 include 해서 사용하면 에러가 발생합니다. 어떤 것을 사용할지 모호 에러가 나타납니다.이럴 경우 … Read more

[C++] 비트 단위 연산자 – 설명 프로그램

저번 글에서 비트 단위 연산자에 대해서 설명했었습니다.이미지가 아니라 눈으로 보고, 실제로 조작하는 프로그램이 있었으면 좋겠다고 생각해서 만들게 됐네요. 아래 파일을 다운받고 실행 하시면 됩니다. BitwiseTest.exe를 실행 시키면 아래와 같이 실행 됩니다. 저번 글에서 처럼 총 8개의 등이 있고 각각의 등들은 인덱스가 아래와 같이 부여되어있습니다. 원하는 등 아래에 있는 버튼을 클릭하면 아래와 같이, 이미지, bool, byte와 … Read more

[C++] union(공용체) – 비트 필드

오늘은 union, 공용체에 대해 알아보겠습니다.공용체는 구조체와 비슷하지만  공용체 안에 선언된 변수들은 메모리를 공유한다는게 제일 큰 차이가 되겠네요.이것 또한 현재는 많이 사용하지 않지만 과거에 메모리가 부족했을때 많이 사용했습니다.네트워크 통신에서 과부하를 줄이기 위해 패킷을 최대한 줄일 때에도 많이 사용합니다. 사용 방법은 아래와 같습니다. 1Byte를 공용체를 사용하여 비트 단위로 관리하면 선언하는데 작업이 더 걸리지만 사용하는 입장에서는 매우 편하게 사용할 수 있습니다. 위 코드를 이미지화 하면 아래 그림과 같습니다. 실제 예제로 알아보겠습니다사람을 구조체로 선언한다고 합시다.여러가지 신체부위가 있겠지만, 양손(손가락 포함)을 코드로 구현하면 아래와 같습니다. 만약 위와 같이 bool로 선언하면 변수크기가 총 10Byte로 잡히게 됩니다. 이럴때 union으로 표현하면 위 문제를 해결 할 수 있습니다. 공용체는 프로그래머가 무엇을 어떻게 구현해야할 때 최적화 … Read more

[C++] struct(구조체) – 비트 필드

이전 글에서 비트 단위 연산을 통해 비트 데이터를 조작하는 것을 알아봤습니다.사실 비트 단위의 데이터를 조작하는 것은 그렇게 자주 경험할 일이 아닙니다.그냥 이런 코딩 방법도 있구나 알아두기만 하세요 기본적인 선언 방법은 아래와 같습니다. 보통 변수를 사용할 때처럼 사용하지만 비트수를 명시하는게 핵심입니다.구조체를 명시하면 실제 할당된 데이터는 아래와 같습니다. 만약 비트 수를 바이트 단위로 정확하게 하지 않아도 컴파일러에서는 … Read more