개인공부/C++(44)
-
union & bit field 로 float 자료형 구현
유니온을 이용해서 처음에 배웠던 float 자료형의 원리를 다시 한번 구현해 보았다. 유니온은 크기가 같은 자료형이 있으면 데이터를 서로 다른 자료형으로 읽을 수 있다. union을 활용하면 long long 자료형을 int 자료형 2개로 구성하면 특정한 조합을 만들 수도 있고 아래의 코드처럼 비트필드와 활용하여 1bit 단위로 자료형을 만들어 float을 분석할 수 있다. 만약에 최상위 비트가 1이면 음수가 된다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #include struct IEEE { unsigned int Fraction: 23; // 가수 부분 unsigned int Exponent : 8; //..
2022.12.30 -
상속
상속 자식 or 부모 클래스는 상속관계에서 다른 클래스의 멤버를 초기화 할 수 없다. 생성자 호출순서는 자식->부모 생성자 실행순서, 초기화 순서 부모->자식 부모쪽에서 구현된 함수도 자식클래스에서 호출 가능하다. 부모파트에서 상속받았다고해도 자식클래스는 부모의 private 멤버함수에 접근할 수 없다. 하지만 protected 접근지정자를 통해서 자식클래스는 접근할 수 있고 외부에서는 접글할 수 없는 멤버를 만들 수 있다. 오버라이딩 상속관계에서 발생하는 개념으로 부모와 자식쪽에 똑같은 함수가 존재하면 자식쪽 클래스에서 함수를 호출하면 자식쪽 함수를 호출한다. 하지만 자식쪽함수에서도 child.CPraent::함수(); 등으로 지정해서 호출도 가능하다. 상속과 포인터 상속관계에서 부모클래스 메모리부터 ..
2022.12.16 -
tree erase 구현
tree 내부에서 중위순회 , 노드 추가등을 구현했지만 erase의 구현을 목표로 코딩을 했어지만 코드를 작성하는과정에서 과부하가 와서 강의를 듣고 따라서 구현을 하였다. erase 의 작동원리를 정리해보았다. 크게 3가지로 나눌 수 있었다. 1. 자식노드가 없는 경우 자식노드가 없는 경우에는 두가지 경우로 다시 나눌 수 있었다 노드가 한개라서 자기자신이 루트노드인 경우에는 노드를 딜리트하고 iteraotor 가 가리키는 root 노드를 nullptr로 수정해주고 부모노드가 있은 경우에는 부모노드내의 왼쪽자식인지 오른쪽자식인지 확인후에 노드 포인터를 nullptr로 수정해준다. 2. 자식노드가 한개인 경우 자식노드가 한개인경우에는 부모노드와 자식노드를 이어주면 된다. 이때 만약에 부모노드가 없는 경우에는..
2022.12.15 -
enum class
#define 의 경우에는 위의 코드처럼 MAN 을 1로취급하게 해준다 c++에서는 이와 비슷한기능을 하는 enum class 가존재한다. enum class 는 열겨형으로 첫번째부터 순서대로 0부터 한개씩 증가하지만 사용자가 임의 대로 수를 대입해서 임의 수부터도 시작이 가능하다. 그다음은 다시 한개씩 증가하게 된다. enum 의 경우에는 가독성을 편린하게해주고 , 디버깅시에 유용하다 enum 을 이용하여 트리노드 인서트 함수를 구현한 예이다. 기존 노드 상태를 END로 보고 값비교를 통해서 노드타입을 정하고 원래라면 조건조건에 따라서 코드를 작성해야하지만 통일되는 방법으로 코드를 더 간편하게 활용할 수 있다.
2022.12.14 -
tree 구현해보기
가장 먼저 트리클래스를 구현하였다 템플릿으로 구현하는게 익숙하지 않아서 먼저 클래스를 구현해보고 템플릿으로 바꿔볼 예정이다 트리부분을 지칭하는 클래스와 트리의 노드부분을 지칭하는 클래스를 따로 구현을 했다. 일단은 먼저 트리 클래스에는 Root노드의 주소, 노드의 갯수, 트리의 높이 인자를 설정하였다. 아직은 레드블랙 구조를 모르기때문에 공부후에 구현을 목표중이다. 소멸자의 경우에는 아직 만들지 못했지만 이터레이터와 비슷한 방향으로 구현할 예정이다. 트리노드의 경우에는 자기보다큰 자식은 왼쪽 작은쪽은 오른쪽으로 구현했다 그리고 자신의 부모노드의 주소를 알고있으며 대입할 데이터, 자신의 트리레벨을 구현했다. 트리 이터레이터도 구현해보았다. 아직은 간단한 ++ 기능, *로 데이터를 리턴해주는 기능을 구현해 ..
2022.12.13 -
tree
tree 데이터 구조의 하나로 , 데이터 항목의 한 묶음을 세그먼트라고 하는데, 이 세그먼트 사이의 연결을 나뭇가지처럼 생각한 것이 트리구조이다. 상위 세그먼트(부모) 는 하나 이상의 하위 세그먼트(자식)를 가지고 있으나, 하위 세그먼트는 반드시 한 상위 세그먼트 밖에 가질 수 없다. 용어 정리 레벨 : 트리의 층을 표현하며 가장 높은 레벨 값이 트리의 높이이다 . 가장 위의 레벨은 0이고 내려갈수록 증가한다. 루트노드: 부모가 존재하지 않는 노드 리프노드(단말노드): 자식이 없는 노드 이진트리 트리구조중에서도 이진트리라는 개념은 자식노드가 2개 이하인 트리이다. 예를 들면 왼쪽그림의 경우에는 부모가 4개의 자식노드를 가지고 있으므로 이진트리가 아니다 오른쪽 그림의 경우에는 모두 자식 노드가 2개이하이므..
2022.12.12