정수형의 비트 계산할때는 보는 관점에 따라 음수가 되고 양수가 된다. 이러한 경우일 때 char = 1바이트 == 8비트 문자형 1개 2의 8승 -127 ~ 128 => 255 까지 표현 가능하니까 256 넣으면 비트가 1 만 켜주게 되서 0으로 나옴 uns
변수라는 것을 만들 때에 이 변수가 어떤 녀석인지 수식해주는 자료 타입을 결정을 해주면서 변수의 이름을 지어 주는 것이다.자료형에 정수형, 실수형을 나누는 이유는"처리"하는 방식이 "완전히"달라서이다."정수형"은 각각의 숫자들을 이진수로 비트의 값을 채워가면서 보는것이
연산자들을 개념적으로 분류를 해놓은 것임.int data = 10 + 10;일 경우 "연산자 우선순위"에 따라서 뭐가 먼저 연산이 될 지 정해진다.대입연산자보다 + 연산자가 우선순위가 높다.if 대입연산자가 우선순위 더 높았으면 data는 10이 였을 것이다.CPU가i
이게 당연하게data = 0data--;data--;\-1\-2나오는데"포인터" 들어가게되면 \++증가시키고\--감소시키고의 개념이 아니다.그래서 그냥"다음 단계로 증가한다"라고 생각하면 더 편할 것이다.\++ || -- 이 수행되는 피 연산자가 누구냐에 따라서 이 "
논리 연산자참, 거짓역, 곱, 합! : 역, && : AND, || : OR참 : 0 이 아닌 모든 값, 주로 1(10을 줘도 참이다 == 1을 준다.)거짓 : 0truefalse이런거 "키워드"로 준다.그래서이런거 1로 봄.false == 0으로 본다.bool일경우
만약에 "가정"if ( )( )안에 참이냐 거짓이냐 들어온다.100 && 200 이라는 것은 참 == 1이니까 if안에 드감.if문이 수행이 안될것이다.거짓과 참의 논리곱은? => 거짓임.이것도 비교를 해서 참 또는 거짓을 뱉어준다.그런데 이럴경우 지금98번째 줄 i
Default는 if문으로 치면 else 문이다.어떤거를 항상 쓴다라기 보다는 프로그래밍 상황에 맞게 if, switch둘중 하나 골라서 사용하면된다.case 20 : 에서 break안걸어주면 밑으로 타고 가서 default까지간다음에 break; 만나서 switch
비트 단위로 연산이 진행될때 사용되는 연산자이다.
이렇게 어떠한 상태를 32가지로 나타낼 수 있다.이런 define정의하고각자리에 대응해야되니까 TIRED = 8로 해주어야 3번째 비트 칸에 들어 갈 수 있다.그다음 4번째 칸에 들어갈려면이렇게 해주어야 4번째 비트칸에 들어감이러한 상태들을 중첩 시킬려면 우째야될까?처
변수는 크게 4가지로 분류된다.1) 지역변수2) 전역변수3) 정적변수4) 외부변수지역, 전역 나누는 기준이 "함수"임.함수는 "기능"인데이런 기능들을 잘? 짜놓은것을 "모듈화" 라고한다.하나의 기능을 명확하게 구별하고 잘 쪼개야된다.옮기기기만 하는 기능, 잠깐 들었다
for, while 안에서 continue, break만나면 어떻게 되는지 알제?
F5함 더 누르면 다음 중단점 까지 바로간다.그냥 프로그램 실행되는 순간아이스크림 천원짜장면 오천원이렇게 6천원어치 공간을 미리 생성(메모리) 해놓음그래서 이런 애들이 존재를 하고있고 값은 안들어 온 것임.현재 main함수 안에 들어와있는 지역을 말한다.
입력없으면 무한루프 돌면서 입력을 기다린다.
데이터를 어떻게 처리하고 관리하는지에 대한것.선입후출먼저 들어온 애가 먼저 간다.영화관 대기줄 느낌.main에서 100byte필요하닥 잡아 놓고Add함수 호출하면 스택에소 8byte정도의 공간이 생김.그리고 Add가 할 일이끝나면 return; 되면Add가 사용하던 메
함수를 이렇게 기능적인 부분을 잘 분리를 해놓아라.
이거 잘 파악 해야한다!스택메모리 영역 다시 보자면마지막에 호출이 된게 종료가 되고main이 제일 마지막임!FILO그러면 호출스택이 뭔지 보면은지금 호출되고있는 메모리 상황을 보여주고있는 것이다.여따 디버그 잡고 호출스택 보면20번째 줄이 호출되기 직전이라이렇게 mai
그런데 굳이 재귀를 재귀함수로 표현하나??근데 핵심은 재귀함수이다.표현성이 좋고, 가독성이 좋다.\-> 이해가 가나??계층 구조를 표현해 낼 때 정말 좋다.그런데 재귀함수로 피보나치 구현을 했을 때속도가 존나게 느려서 60번째 구하라고하면은 일주일이 걸릴 수도있다.그런
선언 및 초기화 방법이다.지금 iArray라는 "10칸" 짜리 만들고 { } 하면 10칸 모두다 0으로 만들어 버린다는 것이다.10칸짜리에 10번쩨 INDEX? -> Stack 어쩌구 에러인데이게 항상 난다는 보장이 없다.10칸까지 만들었는데 11번째 칸에 값을 넣으면
배열 = 동일한 변수명으로 다 할당하고 싶을 때, -> 메모리 구조가 연속적인덱스로 접근을 할 때 -> 조심해야되는 이유!!먼저 C로 보면 이렇다.\-> 대답크기단위?변수의 타입??, -> 맞는 말\-> 크기가 몇인지 데이터가 어떤 형태인지 설명해줌.내코드에서만 적용가
왜 왜 왜 main함수 내에 선언되는 것은 Stack에 메모리 할당후 종료되면 메모리 해제된다. 그런데 전역 변수는 Data 영역이라는 곳에 메모리가 할당이된다. 세부적으로 더 따지면 다 나뉠 수 있기는 한데 일단 이까지만. 가 사용하는 메모리 영역 == 함수가 호출
가 사용하는 메모리 영역 == 함수가 호출 될 때 사용하는 영역 \-> 스택 데이터 영역에 있기 때문에 == 프로그램이 최초로 실행될 때 데이터 영역에 메모리를 할당 받기 때문에 OS가 프로그램(프로세스)가 실행될 때 부여하는 메모리 영역을 개념적으로 나누어서 지칭한
그러면 헤더에다가 선언과 정의를 하면되지왜 이렇게 헤더에다가는 선언만 해놓냐?? 이게 의문일 수 있다.헤더 파일에다가 Add함수를 구현하고 다른 cpp 파일에서 모든 기능을 복붙을 하게 되는데 이러면 컴파일을 하고 마지막 링크 단계에서같은 함수가 3개가 되겠네??같은
여기 int g_i = 0;전역변수 만들고func.cpp에 int g_i = 0; 라는 전역변수 만들었을 경우했을 경우 컴파일 단계는 그냥 넘어간다.컴파일은 각자 파일 단위로 해서 "목적 파일"인 obj 파일이 나온다.각 파일 단위로그래서 각각 파일 단위로봤을 때는 문
솔루션먼저 생성그 하위에 "프로젝트"들이 있고그 밑에 .cpp파일들 있다.이상태에 에서는 CPP_study가 프로젝트인데 이게 프로그램의 실체이다.그래서 CPP_study가 "빌드"되고나면 실행프로그램이 하나 나온다.우리가 이 프로젝트를 "빌드"할 때에솔루션 플랫폼이라
주소를 가르키는 변수 ( == 포인터 변수 )이녀석의 뜻은 그냥 0과 같은데nullptr로 해주는 이유는아무것도 가르키지 않는다는 의미로 넣어준 것이다.에서 \* 는 뭐냐?int자료형 변수를 가르키는 "가르키는 변수"가 된다.i라는 변수가 있으면 i의 주소값을 가져올
변수 선언할 때 int i = 10; 이런식으로 했는데"포인터"는 "주소"를 저장하는 변수이다.그런데 그냥 주소를 저장하는게 아니다. int\* pInt = nullptr; 에서 int\* 가 하는 역할은 뭘까?주소를 가르키는데 그 주소에 있는 데이터를 int형으로 읽
5sArr 는 short포인터 주소라서 오류가 있을 수 있어서 (int\*)로 강제 캐스팅 해주었다.지금 short 배열의 경우이게 지금 (pI + 2)이다.이까지는 이해감.지금 int형으로 접근을 하면 4바이트씩 접근해서 지금 동그라미 친 부분인데이것을 정확한 값을
상수화 == "값이 바뀔 수 없는 상태가 되었다"l-value : 변수r-value : 상수cint 에 const 키워드를 붙이면 "문법적"으로 값을 변경하는 것을 막아주겠다라는 것이지 값을 아예 못 바꾼다는 것이 아니다.(=> 아마 주소를 통해 변경이 가능하지 않을까
포인터 변수가 바뀐다는 것은 딴놈을 가르키던지 아무것도 안 가르킨다던지 둘중 하나이다.두가지 개념이 존재한다.내가 가르키고 있는 원본을 바꿀 것인지 말 것인지포인터 변수 자체가 상수화가 되어서 더이상 다른 대상을 가르킬 수 없게 될 것인지이것은 const가 붙는 위치에
말도 안되게 큰 타입이라 치자main함수위에 큰 자료형의 함수를 계속 호출해야 하는 상황이라면이것을 "복사"를 계속 하고 해제도 하니까 "비용"이 존나게 들어간다=> performance존나 떨어짐그러니까 인자로 받아올 때 주소를 받아오면 되지 않나?그 주소로 그냥 계
void 포인터는 주소를 넣어 주었을 때 주소의 원형을특정 데이터 타입으로 해석을 하지 않기 때문에 아무거나 받을 수 있다.이런식으로그렇기 때문에 "역참조"가 불가능하다.ㅇㅇ => 역참조 불가능하다(역참조 == 주소를 가지고 값에 접근을 하는 것)역참조를 하려면 자기가
스택 : 함수가 변수 사용할 때 사용하는데 main위에 Test함수 쌓이고... main함수 안에 변수들 크기만큼 자리 차지하고힙데이터ROM(코드영역 ==? 읽기전용 메모리 영역)Read Only MomoryOS에 따라 조금 더 세분화 되기는 한다.type : 정수타입
wchar_t는 문자하나를 2바이트로 표현하겠다!문자를 2바이트로 쓴다고 하려고 하면wchar_t = L'a'; L이라고 명시를 해주어야 문자 하나를 2바이트로 사용을 하겠다라는 의미이다.2바이트 문자열의 경우 똑같이 앞이 L붙여줘야 한다.문자 하나하나가 2바이트 단위
어제 한거는 뭐냐하면은 L 안 붙이면 1바이트이고L 붙이면 와이드 바이트라해서 모든 문자 하나하나를 2바이트로 보겠다. 이거였다.1바이트는 엄밀히 말하면 1바이트 아니다."멀티바이트 캐릭터 셋"이라고 해가지고 1바이트로 표현할 것은 1바이트로 2바이트로 표현할 것은 2
window에서 제공하는wsclen 사용하지 않고문자열 길이 구하는 방법 구현 ㄱㄱ이렇게 하니까 지금 실행하면예외발생하면서 오류 던짐..아스키 코드 NUL이 10진수로 32이다.그래서c == 32 일경우 break를 하면 에러나고 c == 0 일 경우는 정상적으로 동작
이런식으로 디버그 잡아보면 계속 붙는다. 굿. 이것을 구현 나는 이렇게 했는데 이렇게 하면 안되는 이유..??? 왜 에러?? 중간에 버퍼 사이즈 들어가는 이유 => 크기를 명시해주기 위해서 나중에 템플릿 방식 wsccat_sn 함수 배울 것이다. 템플릿
문자열 두개를 받는다.문자열의 길이를 비교한다.길이가 누구 하나 더 짧은쪽 -1 | 1 반환길이가 같으면 두 문자열의 시작 주소부터 아스키 코드값으로 비교를 한다.아스키 코드의 값이 더 작은 쪽이 이기는 것이다.비교를 하다가 왼쪽의 아스키 코드 값이 작다면 -1,오른쪽
히히히히히히히히a, b != 변수a, b = 필드 MYST가 지료형이고 s2, s3가 변수이고s2, s3내부에 int, float 파트가 있는데 이게 멤버임.int\* a = &i;a + 1 은 몇씩 증가하노? => 4바이트씩 증가한다.구조체의 경우도 똑같은데 이 경우
메모리 할당함수.변수지역 변수 -> 스택 영역전역, 정적, 외부 변수 -> 데이터 영역메모리 영역스택데이터ROM힙 (동적할당)변수라는 말이 코드상에서 자료형과 이름을 정해놓은 것임그런데 프로그램을 실행을 해봐야만 알 수 있는 변수는??런타임 중에 대응이 가능한 == 동
지금 뭐 하는중?=> malloc(4)할당하고 float 로 받아 오고, int로 pF형변환해서 주소값 받아옴이상태에서 실수를 \*pF에다 값 넣어주고int i = \*pF 했을 때 이상한 큰 값나오는 이유는부동소수점으로 표현된 2.4f를 int로 해석하니까 그런것이다
이거 안될거같은 이유? 나는 일단 될거 같다 라고 생각함. 이유 > 그냥 a의 주소값을 그 순간 복사를 해와서 arr의 크기를 정의해주고 초기화 하니까? 상수값 == const값이 있어야 한단다. 이렇게는 됨. 생각 못한거 변수 = "값이 변하는 수"
구조체 안의 멤버로 배열의 경우 변수를 통해서 선언이 가능? => ㄴㄴ.무슨 문제가 생기나?만약 멤버로 int value1 ,float value2;이렇게 있으면 메모리에 4바이트 이렇게 있는데고정된 크기의 상수로 배열을 선언해주지 않으면 ?바이트 이렇게 될 것임
ReloacteArr();원하는 만큼의 바이트 수를 요청을 하고 힙 메모리 영역 어딘가에 내가 요청한 사이즈 만큼 (단위는 바이트) 할당된 메모리 공간의 주소를 받는다.그런데 이 동작에서 내가 원하는 곳의 주소를 할당 받을 수 있나?이런거 정의 가능? => ㄴㄴ. 없다
가변 배열의 이름이 배열인 이유는 힙메모리의 공간을 연속적으로 잡기 때문이다.이런식으로 다 쪼개 져있음 => Heap 안에이런식으로 head정하고 다 연결되어있음.이때, 데이터 하나를 저장하는 단위를 "노드"라고한다.Max라는 개념이 없음 => 필요할 때 마다 한칸한칸
다시 가변배열 만들고Sort함수 구현 함잘 나온다.제일간단한 방법 : 무작위로 설정되어있는 "난수" 페이지를 참조하는 방식rand()보완 난수에 여러 페이지가 있는데 "시드"값을 통해서 페이지를 변경 시켜준다.그런데 시드값을 똑같이 주면 동일 페이지에 동일한 랜덤 값
Sort함수는 하나인데 여기에 다른 함수들의 주소를 넘겨주어서 다른 정렬로 가변배열을 정리 할 수 있도록 만들어 주도록 하자.Sort하는데 &s이 녀석을 &함수 이렇게 전달을 할 수도 있다.그리고 함수는 이름 자체가 주소로 인정이 되기 때문에 이름만 붙여도 상관없다.이
C스타일 이라서 typedef로 struct \_tagNode를 재정의 했었는데이전에 내부에서 이렇게 안하고 이렇게만 해주니까 못알아 먹었다. => Node라고 재정의 하기 전이라서정의 하는 과정에서 Node라는 별명이 완성되지 않아서 그럼.데이터를 저장하는 기본 단위
Temp Body
나는 일단 이렇게 구현하였다.현재 malloc()으로 동적 할당한 주소를 nodeAddr이 가지고있는 상태.nodeAddr의 nextNodeAddr은 nullptr이다.헤드를 옮겨야 한다. => 그래야 역으로 타고 올라가니까헤드노드값을 새로 malloc한 주소의 값으로
C++나올떄, 기존 C에서 없던 구조체의 객체 지향적인 부분들이 C++의 클래스가 들고 나옴.구조체란?사용자가 직접 정의한 자료형클래스란?사용자가 정의한 자료형C에서는 구조체를typedef로 재정의해서 사용해야 되었던것과는 달리그냥 이렇게하고tMy 하고 하면됨.이제 이
어떤 기능을 수행하려면 "목적 대상"이 있어야한다.m_i가 해당 객체의 m_i이다.=> 뭘 말하고 싶은지 알겠제?C에서는 어케 했노??이런식으로 해당 포인터를 받아서 그 주소의 변수를 어쩌구 하겠다였다.그래서 호출한 객체를 멤버함수 안에서이 this라는 키워드가 바로
int a = 10;int b = 100;b = a;이거는 값을 복사하는 것인데이거는 뭔상황이노?일단, 구조가 같다.c3의 객체가 가지고있던 값들이 복사가 되지 않을까??int같은 경우에는 "기본 자료형"이다. 그래서 c2 = c3이런경우에(생성자들도 만들어주지 않으면
클래스 3~6까지 이니셜라이저 사용해서 초기화를 해주도록 한다. 동적 할당 malloc대신 -> new 키워드 우리가 C스타일 이였다면 malloc을 통해서 했는데 동적 할당 방식이 "new" 라는 키워드가 생김 해제 free -> delete 소멸자가 호
이런식으로 함수 오버로딩이 가능하다.C이렇게 가능하고 < typename T > 에서 typename이라 되어있는 부분도 class라고 적어 주어도 OK.여기서 진짜 Class아니다.T가 "치환 자료형"이다.typename자리에 어떤게 들어갈지 요청을 했을 때,
이렇게 해주는 순간 클래스 템플릿이 됨.클래스가 아니라 클래스들을 만들 수 있는 더 근본적인 원형이 된 것이다.그래서 타입을 정해주어야한다. 그래야 그런 버젼의 클래스가 생길것이고그 객체를 만들어서 쓸 것이라그러면 이거 다 T로 바뀌어야하나?인자는 어떻게 되야하나?왼쪽
오늘은 연결형 리스트를 클래스버젼으로 만들어 볼 것이다.연결형 리스트는 클래스로, 리스트안에 들어갈 노드는 구조체로 만들것이다.C++ 문법 기준으로 구조체와 클래스의 차이는 없다.클래스라는게 생겨나면서 구조체의 기능들이 생성자, 소멸자, 상속 이런게 다 가능하기 때문에
이거 C객체 없이도 호출가능한거'::' 범위 확인하는 연산자.g_int는 지금 전역변수이다.왜? => 어떤 함수안에 선언을 하지 않았기 때문에접근 하려면 이렇게 해야함.cin, cout은 C, C++ 표준기능들이 namespace std안에 들어있는 것이다.그런데 이
표준 라이브러리에서 제공해주는 가변배열표준 라이브러리에서 제공해주는 연결형 리스트이거 두개 다 당연히 "템플릿"이다.vector에는 당연히 push_front없는데배열에서 앞에다 넣는다?? => ㅈㄴ 비효율적앞에다가 데이터를 넣을 것이였으면당연히 리스트가 효율적이다.이
는vector, list와 같은 자료구조 내에서데이터를 넣었을 때iterator를 통해 내부에 데이터를 접근 하기도 하고,순회 할 수도 있게 만들어주는 "반복자"이다.이런식으로 operator나 멤버함수로 순회 씹가능 하지만,vector도 iterator가 내부에 구현
가변배열에서의 iteratorprivate의T\* == 8바이트, int 두개 8바이트long long == 8바이트그러면 가변배열 CArr객체를 하나 만들면 몇 byte노?=> 24바이트하면 바보병신임.iterator 클래스가 안에 선언되어있네?CArr(가변배열) 객
iterator는 어떤 객체의 첫번째 주소를 알고있는 것이다.(데이터 변수의 이름이 첫번째 주소이다.)우리가 구현한 것은 문제점이 하나있는데가변배열이라 데이터를 계속 넣다보면 Resize를 해서 새로운 2배 크기의 메모리를 할당한다.그러면 iterator는 2배로 커진
전위연산자의 경우 반환타입이 iterator& (iterator를 참조하는것을 반환)하는 이유가 뭐때문이냐? => ++(++k) 하는 경우를 대비하기 위하여.이런경우 발생할 수 있기 때문에.우리는 iterator& 자체를 반환하면되는데operator++ 를 오버로딩 한
이부분인데호출 시점은 동일하다고 저번시간 까지 했었다.이부분은 참조가 아니라서 복사본을 return 하기때문에반환하는 것은 또다른 복사본이라 사라짐.그래서 this로 복사본을 만들고\++후위를 호출한 객체를 ++ 연산자 써주어서 호출하고return 으로는 복사본을 반환
오늘 할 것은 erase선언부는 이렇게된다인자 생각하면 원본을 수정하지 않겠다라는 것임.반환타입이 iterotor이고(그러면 일단 원본을 수정하지 않고 뭘 하겠다는 거네?)표준 라이브러리에서 제공하는 vector로 일단 본다.push_back 4번 호출하고 iterat
erase함수가 인자로 받아온 iterator가 가르키는 부분(데이터를)을 삭제를 하겠다라는 말이다.\-1이라면 end iterator라고 보기로 했었다.지금 m_dataCout <= iter.m_i_indexNumber인데데이터가 10개 기준일 때 m_dataC
우리가 구현한 것은 지금struct LinkedListNode의 멤버 변수로LinkedListNode< T > m_prevNodeAddr;LinkedListNode< T > m_nextNodeAddr;T 이렇게 가지고 있고class LinkedList의
insert했을 때 이렇게 들어가야함.이 iterator 생성자인데insert하고나서 반환하는 생성자에 뭐 넣어 주어야 할까?우리가 insert하였을 때의 새로 생성된 iterator를 되돌려 주어야한다.이렇게 그래야 main에서 다시 받으면 insert한 녀석이 들어
노드(vertex)를 연결할 수 있으면 노드들 간에 연결관계 표현할 수 있으면 그래프이다.트리 < 그래프그래프안에curcit, circle, scikit이렇게 3가지있음 애내들은 "순회"가 가능함."트리"는 "순회"가 불가능 하다."계층" 관계를 표현할 때 사용을
"힙"이라는 자료구조를 만들 때 쓴다.자식을 항상 꽉꽉 채운 이진트리이런 규칙을 가지는 트리는일반적으로 "배열"로 구현을 한다.지금 루트 노드의 자식(1번 노드의 자식은) 2k+1이다.k 에다가 본인의 인덱스 번호(0)을 넣으면 2 \* 0 + 1이라 1나온다.그러면
먼저 생각 해야할게이진 트리 자식이 두개로 제한되는 트리 자료구조이진 탐색 트리이진으로 탐색을 하는 트리완전 이진 트리자식이 2개씩 꽉 채워 져있는 트리이진 탐색 트리에서의 "이진 탐색"이란시간복잡도 O(log N)을 가짐. 반반 씩 나누어서 가다 보니까.114를 넣는
BST 이미 표준 라이브 러리에서 이진 탐색 트리를 제공하고있다. std::map은 정확하게 말하면 class template이다. set int를 저장할 수 있는 이진 탐색 트리 기반의 "탐색"에 용이한 그런 자료구조 알고리즘을 사용한 "컨테이너"이다. 컨
일단 이렇게 가능하다.지금 wchar_t가 한 문자당 2바이트인데이것을 cout 으로 출력을 할려고하면 안됨.wcout으로 출력해야하고콘솔창에 아무것도 안뜨거나 이상하게 뜰 수 있는 이유는정확하게는 모르지만 UTF 문제임그래서넣어 줘야함.우리가이렇게 선언 했는데타입으로
구조는 대충 이정도..??생각 ㄱㄱclass CBST가 이진 탐색 트리 말하는거임.지금 Pair를 받는데이 Pair는 이녀석이다.first가 키값, second가 데이터인 Pair 구조체임.그러면 이 Pair를 받으면Pair를 저장할 수 있는 "노드"를 "동적할당"해서
TYPE_5 = 100 이면TYPE_6은 101부터 다시 시작 ( C어느쪽 TYPE_1을 얘기하는지 모호함.그래서 이러한 모호한 문제를 해결하기 위해서이렇게 하면 구별이 되어서 모호한게 없어짐.또한 정수형으로 사용할려면 (int)로 명시적으로 캐스팅 해주어야함."어떤
포인터 배열 enum, enum class 다른점 (모호성)enum, enum class 개념 -> 활용포인터 배열을 사용하여 인덱스 번호에 접근enum class 를 사용하여 포인터 배열의 주소와 인덱스 접근이 가능하게 만듦.https://jhnyang.ti
원래는 이렇게 접근이 가능한데이게 아니라 '->' 연산자를 제공을 하게 만들어서이렇게 접근이 가능 하도록 만들어야한다.로 iterator 접근을 하면 pair가 나와 주어야한다.이렇게 \*연산자와 함께 구현을 해주었는데pair에 접근을 할 때이렇게 접근을 해야하는데이것
지금까지 특정 노드를 삭제하는 거 제외하고 거의 다 구현을 함.
삭제될 노드의 부모와 삭제될 노드의 자식을 연결을 잘해주면된다.지금 이부분에서의 배열 포인터는그러면 이제 erase를 하게되면 dataCount는 5개가 남아야하고100과 25가 잘 연결되면 된다.ㅇㅇ. 연결 잘되었다.100의 왼쪽 자식의 first가 25이고ㅓ25의
상속받으면 이런 메모리 구조임child안에는.
"함수명"이 똑같은데 인자타입의 "차이"가 생겨서 "컴파일러"가 "구분"할 여지를 주는 것.동시에 같은 이름의 함수가 여러개 존재 가능."상속" 관계에서만 사용이 가능하다.부모에서 virtual로 함수 자식이들이 알아서 구현해라~ 던져주면자식클래스에서 이것을 정의를 해
소멸자는 호출뿐만아니라 실행도 자식쪽에서 먼저 다 수행이되고부모쪽 기능을 호출하는 식으로 되어있다.( C즉, 자식 소멸자 코드를 다 실행하고 (종료하지는 않고) 부모 소멸자 호출하러감.밑에서 내가 할꺼 다하고 올라가서 할꺼 다하고 다시 올라가서 할꺼 다하고 내려오는 식
CPP 에서의 다형성을 어떻게 이해를 하냐?이것을 이해를 하기 위해서는"상속 AND 포인터"를 알아볼 필요가 있다.1번은 문제가 됨.2번은 문제가 안됨.기본적으로 파생클래스는 기반클래스의 정보를 알지만 기반클래스는 파생클래스의 정보를 모르기때문에< 기반클래스 "변
Child클래스는 메모리 구조를 보면 이런 "직렬 형태"로 되어있다.부모 포인터 타입으로 접근을 하여도 이렇게 접근을 하기 때문에 문제가 되지 않는다.하지만 부모포인터 타입으로 접근을 하였을 경우 실제 접근할 수 있는 기능은Parent안에 정의되어 있는거 밖에 없다.t