본문 바로가기

Embedded Engineer

(86)
클래스(class) - 생성자, 소멸자 생성자 c++에서 클래스를 통해 객체를 생성할 때 자동으로 실행되는 생성자(constructor)라는 특별한 멤버 함수를 통해 객체를 초기화 한다. 한 클래스에서 여러 개의 생성자를 둘 수 있으나, 이중 하나만 실행된다. 생성자의 특징은 다음과 같다. 1. 생성자 함수는 오직 한 번만 실행된다. 2. 생성자 함수의 이름은 클래스 이름과 동일하게 작성한다. 3. 생성자 함수의 원형에 리턴타입을 선언하지 않는다. 4. 생성자는 중복이 가능하다. 5. 클래스에서 생성자를 만들지 않았을 경우 컴파일러가 기본 생성자를 만들어 삽입하고, 자신이 삽입한 기본 생성자를 호출한다. 코드 구현 class Person { private: LQueue_Struct questionQueue; PERSON_CONDITION co..
클래스(Class) - 객체 생성 c++에서 클래스란 객체를 정의하는 틀 혹은 설계도로서, 클래스에 멤버 변수와 멤버 함수를 선언한다. 클래스와 객체의 관계는 붕어빵 틀과 붕어빵의 관계와 비슷하다. 붕어빵 틀은 c++클래스에, 붕어빵은 c++ 객체에 비유된다. c++객체는 c++ 클래스라는 틀에서 찍어내어, 멤버 변수 메모리와 멤버 함수 코드를 실제 가지고 c++프로그램이 실행 되는 동안 실존하는 실체 혹은 인스턴스 이다. 위 그림과 같이 Person이라는 클라스가 있다. 클라스를 이용해 Jitae 객체와 Hyojin 객체를 만들 수 있다. 클래스의 멤버 변수를 보면 노란색 박스와 초록색 박스로 나누어져 있다. 노란색 박스는 사람한테 물어보지 않고 겉모습만 봐도 알 수 있지만, 초록색 박스의 경우 말해주지 않는 이상은 알 수 없다. C+..
cin, cout and namespace cpp 프로그래밍 정리. std::cout cout은 c++의 표준 출력 스트림 객체이다. 프로그램에서 출력할 데이터를 자신과 연결된 스크린에 대신 출력해준다. c언어에서의 printf와 비슷한 기능이다. std::cout을 쓰기 위해서는
Matlab 기본 문법 -1 Matlab 기본 문법에 대해 공부하자 참조: https://matlabacademy.mathworks.com/ Self-Paced Online Courses - MATLAB & Simulink Learn MATLAB for free with MATLAB Onramp and access interactive self-paced online courses and tutorials on Deep Learning, Machine Learning and more. matlabacademy.mathworks.com matlab 은 프로그래밍 언어와 비슷하게 if, for, while등으로 흐름제어를 할 수 있는거 같다. 1. 명령 입력하기 이 파트에서는 특별히 기록할 만한것 없이 기본적인 연산에 대해 공부한다. ..
Hash Table Chaining 구현 Hash Table의 Chaining을 구현 해보자 기존 Hash Table 에서 약간(?) 심화 과정으로써 Hash Table에서 Hash Key가 겹쳤을 경우를 처리하는 자료구조이다. 위와 같은 상황이 놓여졌을 때 Chaining으로 하여 값을 Insert 한다. Chaining은 Linked List로 구현하기 위해 Hash Table 구조체를 다음과 같이 수정하였다. typedef struct _storage { void *mem_slot_p; struct _storage *next_p; } Storage; typedef struct _hashTable { /* == hash table member == */ Storage **data_strge_pp; /* == hash table work fu..
Hash Table 구현 Hash Table을 구현해 보자 Hash Table 이란 자료를 저장하기 위한 여러가지 자료구조중 하나로 복잡도가 O(n) 이다. Hash Table을 대략 그림으로 표현 하면 다음과 같다. data 및 Hash key를 만드는 함수에 따라 Hash Key 가 중복 될수 있지만 추후 다루고 현재는 중복되지 않는다는 가정에 작업한다. Hash Table 에 자료를 저장할 변수는 void 형 이중 포인터로 한다. void로 한 이유는 저장 할 데이터 구조가 어떻게 저장하냐에 따라 저정할 데이터 구조가 매번 바뀌기 때문에 범용성을 위해 void 형을 사용 했고 저장하는 데이터 역시 데이터 자체를 저장하기 보다 데이터를 나타내는 포인터를 저장하기 위해 이중 포인터를 사용했다. 따라서 HashTable를 사용하..
AVL Tree 구현 AVL Tree를 구현해보자. AVL Tree는 이진 트리의 균형이 맞지 않을 때 탐색연산의 시간 복잡도가 O(log2n)아닌 O(n)에 가까운 시간 복잡도를 보이는데 이런 단점을 해결위한 트리중 하나이다. 위 그림을 봤을 때 왼쪽은 균형이 무너진 이진트리이고 오른쪽은 균형이 잡힌 이진트리이다. 5를 탐색한다고 했을 때 한눈에 봐도 성능차이가 난다는 것을 알 수 있다. AVL Tree는 균형이 무너졌는지 확인 후 균형을 맞추는 작업을 한다. 여기서 균형이 무너졌는지 확인 하는 방법은 균형 인수(Balance Factor)를 구하여 확인한다. 균형 인수 = 왼쪽 서브 트리의 높이 - 오른쪽 서브 트리의 높이 서브트리의 높이를 구하는 방법은 자식 노드를 가지고 있는 부모노드 의 갯수를 체크하여 높이를 확인한..
이진탐색트리 Search 후 remove 구현 이진 탐색트리 삭제를 구현해보자 이진 탐색트리에서 search후 삭제를 할 때 다음 같은 상황이 있다. 1. 삭제할 노드의 자식 노드가 left 노드만 존재하는 경우 2. 삭제할 노드의 자식 노드가 right 노드만 존재 하는 경우 3. 삭제할 노드의 자식 노드가 양쪽 노드가 모두 존재하는 경우 4. 삭제할 노드의 자식 노드가 없는 경우 1. 삭제할 노드의 자식 노드가 left 노드만 존재하는 경우 위 그림에서 4의 자식노드는 left 노드만 있으므로 4를 삭제한다고 해보자 쉽게 판단 할 수 있듯이 4의 자식 노드를 8의 자식노드에 붙여 주면 끝이다. 4 노드를 삭제 후 8의 자식노드를 2에 연결 해주면 끝~!!! 2. 삭제할 노드의 자식 노드가 right 노드만 존재 하는 경우 삭제할 노드의 자식노드가..