c++ 4

C++ 순수 가상 함수(추상 클래스)

순수 가상 함수에 대해 공부합시다. 순수 가상함수란? - 함수의 정의는 없으며 오직 다형성 파생 클래스에 오버라이드(override)만으로 적용되는 함수입니다. virtual void Open() = 0; 요런 형태가 됩니다. 이렇게 선언된 순수 가상 함수가 있는 클래스는 보통 추상 클래스(abstract class) 라고 부릅니다. 이러한 추상클래스에 특징은 절대로 자기 혼자 객체화를 시킬수가 없습니다. 왜 이러한 추상 클래스를 사용을 하는가에는 ex) 예를들어 자동차가 있으면 그 자동차에도 스포츠 자동차가 있고 일반차가 있으면 차에 문을 위로 올리는 차 아래로 올리는 차로 나눌수 있습니다. 또한 추상클래스를 상속받는 클래스들은 순수가상함수를 반드시 재정의를 해줘야하기때문에 강제성도 보장합니다. 이를 ..

C++ Virtual(가상) 함수

오늘은 Virtual 함수 가상 함수에 대해 공부하도록 하겠습니다. 가상 함수란? - 기본 클래스 내에서 선언되는 파생 클래스에 의해 재정의되는 맴버함수 가상 함수를 호출하고 파생 클래스의 함수를 실행할 수 있습니다. 주로 실행시간에 함수의 다형성을 구현하는데 사용됩니다. 가상 함수는 기본 클래스내에 Virtual 키워드로 함수를 선언합니다. 가상 함수 선언에는 몇가지 규칙이 존재합니다. 1. 클래스의 공개(public) 섹션에 선언합니다. 2. 가상 함수는 정적(static)일 수 없으며 다른 클래스의 친구(friend) 함수가 될 수도 없습니다. 3. 가상 함수는 실행시간 다형성을 얻기위해 기본 클래스의 포인터 또는 참조를 통해 접근(access)해야 합니다. 4. 가상 함수의 프로토타입(반환형과 매..

C++ 포인터(Pointer) 레퍼런스(Reference) 차이

포인터와 레퍼런스에 차이 시작 포인터(Pointer)와 레퍼런스(Reference)는 보면 둘다 참조를 하는 변수임은 똑같다고 생각을 하였다. 하지만 이 둘도 엄연히 차이점이 존재하였다. 그 차이점을 알아보자. 1.NULL의 허용 여부 일단 NULL을 허용하냐 안하냐에서 차이점이 난다. 포인터는 NULL 즉 nullptr도 허용이 되지만 레퍼런스 만큼은 허용이 되지않습니다. 포인터는 즉 NULL을 가르키거나 초기화 하지 않을경우 Null pointer exception 또는 Segmentation Fault 에러를 난다. 따라서 포인터는 반드시 Null Check 를 해줘 코드를 처리를 해줘야 에러를 방지할수 있습니다. Student S = new Student(); if(S!=nullptr) { S->..

댕글링 포인터(Dangling Pointer)

댕글링 포인터 댕글링 포인터란? - 포인터가 여전히 해제된 메모리 영역을 가리키고 있다면, 이러한 포인터를 댕글링 포인터(Dangling Pointer)라고 한다. 댕글링 포인터가 가르키는 메모리는 더는 유효하지 않다. 댕글링 포인터는 Premature Free(조숙한 해제, 너무 급한 해제) 라고 부르기도 한다. 댕글링 포인터의 사용은 아래 목록에 나열된 문제를 포함한 다양한 문제가 있다. -메모리 접근시 예측이 불가능한 동작 -메모리 접근 불가 시 Segmentation Fault -잠재적인 보안 위험 이런 문제는 다음과 같이 동작을 할경우 발생한다. -메모리 해제 후, 해제된 메모리에 접근 -함수 호출에서 자동 변수를 가리키는 포인터의 반환 - 댕글링 포인터의 코드 - #include using n..