본문 바로가기

virtual2

[ C++ ] 가상 소멸자( Virtual Destructor ) 말 그대로 virtual로 선언된 소멸자를 가상 소멸자( Virtual Destructor )라고 한다. 근데 왜 소멸자에 virtual 선언이 필요할까? 먼저 예제를 보자. ( * 혹시 VS에서 위 코드를 작성하다가 다음과 같은 에러가 발생한 경우, "const char * 형식의 인수가 char * 형식의 매개 변수와 호환되지 않습니다" 프로젝트( 오른쪽 클릭 ) > 속성 > C/C++ > 언어 > 준수 모드 > 아니오로 바꿔주면 해결된다. VS 2015에는 가능한데 VS 2017부터 준수 모드가 생겨서 생긴 문제이다. ) 결과에서 보이듯이 객체의 소멸을 A형 포인터로 명령하니, A 클래스의 소멸자만 호출되었다. 따라서 strB가 남아있어, 메모리 누수가 발생하게 된다. 즉, 객체의 소멸과정에서는 포.. 2019. 10. 10.
[ C++ ] 가상 함수( virtual Function ) , 순수 가상함수( Pure Virtual Function ), 추상 클래스( Abstract Class ) ( * 개발환경을 Dev-C++-> Visual Studio로 변경함. 헤더 파일과 클래스를 관리하기 편하고 그 외 코딩하기에도 편함. ) 가상 함수에 들어가기 전에, 다음의 예제를 살펴보고 사용하는 이유를 알아보자. 클래스 A A를 상속하는 클래스 B, B를 상속하는 클래스 C가 있다. 그리고 Show 함수는 오버라이딩으로 구현되어있다. 메인 함수를 살펴보면 34행) C형 포인터 변수 c는 C 객체를 가리키고 있고, 35행) B형 포인터 변수 b는 C객체를 가리키고 있고, ( 결론적으론 .. c가 객체 C를 가리키니까. ) 36행) A형 포인터 변수 a는 C 객체를 가리키고 있다. ( 결론적으론.. b가 객체 C를 가리키니까. ) 이 말 즉은, "자료형이 기초 클래스인 포인터 변수는 유도 클래스의 객체.. 2019. 10. 10.