728x90

포큐아카데미 c++3200강의 내용을 개인학습용으로 정리한 내용입니다.

 

상속

부모클래스 접근한정자 지정을 할 수 있다.

 

암시적 부모생성자호출

암시적 부모 생성자를 호출할 때는 기본 생성자를 호출한다. 따라서 부모에 기본생성자가 존재하지 않는다면 컴파일 에러가 발생한다.

소멸자는 하나밖에 존재하지 않으므로 자동으로 자식 소멸자 호출후 부모 소멸자가 호출된다.

 

함수도 메모리에 존재한다

 

정적바인딩, 동적바인딩

java는 기본적으로 부모 클래스는 가상함수이기 때문에 실체에 따라서 메소드를 호출하는 반면

c++은 virtual 키워드로 가상함수를 만들어 놓지 않으면 무늬에 따라서 호출된다.

java는 기본적으로 가상함수인걸 막기 위해선 final 키워드를 사용해야한다.(조금이라도빨라짐)

c++에서 virtual 키워드를 생략하면 정말 큰일 날 수 있다.

 

가상테이블(점프테이블,룩업테이블)

면접문제로좋음

 

가상소멸자

부모 클래스 소멸자를 virtual로 지정하지 않아서 자식 객체를 지울때 정상적으로 자식 객체의 소멸자가 실행되지 않아 메모리 누수가 발생할 위험이 있다.

부모 소멸자가 virtual이면 자식도 virtual이 되지만 습관적으로 부모 자식 둘다 virtual을 넣어두자. 누군가 또 자식을 상식 받게될 수도 있으니..

모든 클래스마다 가상 소멸자를 추가할것!!! 가상함수는 느리지만 혹시 모를 메모리 누수보다 낫다.

 

다중상속

c++만 유일하게 지원한다. 다중상속일 지원하기 떄문에 super키워드를 사용할 수 없다.

 

다중 상속 대신 인터페이스를 사용해라 (자바처럼)

 

추상클래스

순수 가상함수를 가지고 있는 클래스. 개체를 만들 수 없음

 

인터페이스

c++는 인터페이스를 지원하지 않음. 그래서 순수 추상클래스를 이용하여 흉내가능하다.

 

728x90

+ Recent posts