반응형

<개인공부>/[C++] 55

[C++] 가상함수와 순수가상함수의 차이(virtual, pure virtual)에 대해서

안녕하세요. BlockDMask 입니다. 오늘은 C++의 아주 중요한 가상함수, 순수가상함수에 대해서 알아보겠습니다. 우선, 기본적으로 가상함수(virtual)와 순수가상함수(pure virtual)에 대한 기본적인 지식이 조금 있는 분 이셔야 이 내용을 읽기 적절할 듯 싶습니다. 1. 일반(단순)가상함수, 순수가상함수에 대한 기본적인 개념 - 순수가상함수와 가상함수를 아시는 분이라면 문장하나로 이해할 수 있을거라 생각합니다. - 순수 가상 함수는 인터페이스(Interface)를 자식 클래스에게 전달하기 위해 사용하는 함수입니다. - 일반(단순) 가상 함수는 인터페이스(Interface) + 함수의 선언(내부 구현) 까지 자식 클래스에게 전달하기 위해 사용하는 함수입니다. 풀어서 말하면, 순수가상함수는 ..

[C++] dynamic_cast (타입캐스트 연산자)

안녕하세요. BlockDMask 입니다. 이번에는 C++의 네가지 타입캐스트 연산자 (static_cast, const_cast, reinterpret_cast, dynamic_cast) 중에서 마지막 dynamic_cast에 대해서 알아보겠습니다. 1. dynamic_cast에 대해서 dynamic_cast는 safe downcasting(안전한 다운캐스팅)에 사용이 됩니다. (물론 upcasting에도 쓰입니다) 조금 쉽게 말씀 드리자면, 부모 클래스의 포인터에서 자식 클래스의 포인터로 다운 캐스팅 해주는 연산자 입니다. (부모클래스의 포인터가 실제 무엇을 가리키고 있는지가 중요합니다) 하지만, 런타임 시간에 실제로 해당 타입이 다운 캐스팅이 가능한지 검사하기 때문에, 런타임 비용이 조금 높은 캐스트..

[C++] reinterpret_cast (타입캐스트 연산자)

안녕하세요 BlockDMask 입니다.이번에는 C++ 의 네가지 타입 캐스트 연산자 중에 (static_cast, const_cast, reinterpret_cast, dynamic_cast) reinterpret_cast 에 대해 알아보겠습니다.>reinterpret_cast 에 관한 기본 특성reinterpret_cast(expression)reinterpret_cast(대상) reinterpret_cast는 임의의 포인터 타입끼리 변환을 허용하는 캐스트 연산자 입니다. 또한 정수형을 포인터로 바꿀 수도 있습니다. (이때 정수값이 포인터의 절대 주소로 들어가게 됩니다. -> 위험)expression에 해당하는 것을 new_type으로 비트단위로 바꾸는 것 입니다. 다른 형태의 포인터로 변경이 가능하기..

[C++] const_cast (타입 캐스트 연산자)

안녕하세요. BlockDMask 입니다.오늘은 C++ 의 네가지 타입 캐스트 연산자 중에 (static_cast, const_cast, reinterpret_cast, dynamic_cast) const_cast 에 대해 알아보겠습니다.> const_cast 에 관한 기본 특성const_cast(expression)const_cast(대상) const_cast는 포인터(pointer) 또는 참조형(reference)의 상수성(const)를 잠깐 제거해주는데 사용합니다. const_cast는 volatile 키워드를 잠깐 제거해 주는 데에도 사용이 가능합니다. 다른 캐스트 연산자가 하는 형 변환은 불가능 하며 오직 상수성(const)를 제거하는 것만 사용가능 합니다. 또한 다른 캐스트 연산자는 const_..

[C++] static_cast (타입캐스트 연산자)

안녕하세요 BlockDMask 입니다.오늘은 C++의 네가지 타입변환 연산자 static_cast, dynamic_cast, reinterpret_cast, const_cast 중 static_cast에 대해 알아보겠습니다. > static_cast 기본 형태 static_cast(대상); static_cast(expression)특징 (논리적으로 변환 가능한 타입을 변환한다) compile 타임에 형변환에 대한 타입 오류를 잡아줍니다. 실수와 정수, 열거형과 정수형, 실수와 실수 사이의 변환 등을 허용한다. arr -> point로 변경 가능합니다.function -> function pointer로 변경 가능합니다. 포인터 타입을 다른것으로 변환 하는 것을 허용하지 않습니다. (compile erro..

[C++] sort algorithm 정리 및 예시

안녕하세요BlockDMask 입니다.오늘은 C++ STL 에서 제공하는 알고리즘 중에 sort 알고리즘에 대해 알아보겠습니다.0. sort algorithm sort 알고리즘은 헤더파일에 속해있습니다.sort(start, end)를 이용하여 [start, end) 의 범위에 있는 인자(element)를 오름차순(default)으로 정렬해주는 함수 입니다. start를 포함하고 end를 포함하지 않는 구간. (iterator를 생각하면됩니다.)quick sort(퀵 정렬)을 기반으로 함수가 구현되어있어, 평균 시간복잡도는 n log n 입니다. 따로 quick sort를 구현할 필요 없이 C++ STL에서 제공해주는 sort 함수를 이용하면 편리하게 정렬 할 수 있습니다.1. 원형 및 사용법원형templa..

[C++] 레퍼런스, Reference, 참조자

안녕하세요 BlockDMask 입니다. 오늘은 C++의 참조자(Reference)에 대해서 알아보도록 하겠습니다. 0. 레퍼런스(Reference)란? 참조자(Reference)는 변수에 "별명"을 붙인다고 합니다. 그 "별명"을 통해서 변수의 메모리 공간에 접근이 가능합니다. 참조자(Reference) 이름 앞에 "&" 를 붙여서 선언합니다. 참조자(Reference)는 변수에 대해서만 선언이 가능하고, 선언과 동시에 누군가를 참조 해야만 합니다. 참조자(Reference)는 참조의 대상을 바꾸는 것이 불가능 합니다. 참조자(Reference)는 NULL 로 초기화 하는것이 불가능 합니다. int type 변수 a 를 가리키는 int type의 참조자 ref를 선언해 보겠습니다. 123456789101..

[C++] priority_queue container 정리 및 사용법

안녕하세요 BlockDMask 입니다.오늘은 Container Adapter (stack, queue, priority_queue) 중 마지막 priority_queue 에 대해 정리해보겠습니다. 0. priority_queue container우선순위 큐를 구현한 것 입니다. priority_queue container 는 vector, deque container 와 붙어서 사용이 가능합니다. (list 불가능) 내부적으로는 에 있는 힙 관련 함수들을 사용하여 구현되어있습니다. 내부구조 default 는 vector container 기반으로 설정되어 있습니다. 정렬기준 default는 내림차순(less) 기반으로 설정 되어있습니다.1. priority_queue container 사용법 헤더파일 안..

[C++] queue container 정리 및 사용법

안녕하세요! BlockDMask 입니다.오늘은 Container Adapter (stack, queue, priority queue)중 두번째인 queue container adapter에 대해 정리해보겠습니다. 0. queue containerFIFO (First in, First out) 방식으로 동작 됩니다. queue container는 deque와 list container 에 붙어서 사용 가능합니다. (vector container 불가능.) vector container가 불가능한 이유 : queue 자료구조 특성상 뒤에서 삽입하고 앞에서 빼야하는데(FIFO) vector는 앞에서 빼는 동작을 지원해 주지 않기 때문입니다. 내부적으로 deque, list container 로 구현이 되어있습..

[C++] stack container 정리 및 사용법

안녕하세요. BlockDMask 입니다.오늘은 Container Adapter (stack, queue, priority_queue) 중에 stack container 에 대해 알아보겠습니다.다들 stack의 동작 원리나 구조는 아신다고 생각하고 포스팅 하곘습니다.0. stack containerLIFO(Last in First out) 방식. stack container adapter는 vector, deque, list container에 붙어서(기반으로) 사용이 가능합니다. 내부적으로는 vector, deque, list container의 구조로 구현이 되어있되, stack이라는 포장지로 잘 감싸서 stack과 같이 작동하도록 멤버 함수 등을 지원해 주는 것 입니다. default는 deque c..

반응형