상속

2022. 12. 16. 12:29개인공부/C++

상속

자식 or 부모 클래스는 상속관계에서 다른 클래스의 멤버를 초기화 할 수 없다.

생성자 호출순서는 자식->부모

생성자 실행순서, 초기화 순서 부모->자식

부모쪽에서 구현된 함수도 자식클래스에서 호출 가능하다.

부모파트에서 상속받았다고해도 자식클래스는 부모의 private 멤버함수에 접근할 수 없다.

하지만 protected 접근지정자를 통해서 자식클래스는 접근할 수 있고 외부에서는  접글할 수 없는 멤버를 만들 수 있다.

 

 

오버라이딩

상속관계에서 발생하는 개념으로 부모와 자식쪽에 똑같은 함수가 존재하면 자식쪽 클래스에서 함수를 호출하면

자식쪽 함수를 호출한다.

하지만 자식쪽함수에서도 child.CPraent::함수(); 등으로 지정해서 호출도 가능하다.

 

상속과 포인터

상속관계에서 부모클래스 메모리부터 순차적을 메모리가 쌓인다

메모리 공간 [ 부모 -> 자식 ->손자] 이런 형식이다.

그러므로 부모 포인터 타입으로, 부모클래스로부터 파생되는 자식클래스 객체들의 주소를 가리킬 수 있다.

모든 객체를 부모 클래스 타입으로 인식하게 되기 때문에, 실체 객체가 무엇인지 알 수 없다.

virtual 키워드를 통해서, 각 클래스는 자신만의 고유한 가상함수 테이블을 가지게 된다.

각 클래스의 객체들은 가상함수 테이블 포인터에서 해당 클래스에 맞는 테이블을 가리키게 된다.

그 테이블에는 해당 클래스의 가상함수들이 등록되어있다.

 

다운캐스팅

부모 클래스에서 선언되지않는, 오직 자식쪽에서만 추가된 함수를 호출하고 싶을때

자식 포인터타입으로 일시적으로 캐스팅해서 호출한다.

문제가 발생 할 수 있기때문에 dynamic_cast로 안전하게 확인해 볼수 있다.

RTTI ( Run Time Type Identification or Information)

 

추상화

실체 객체를 생성할 목적의 클래스가 아닌 , 상속을 통해서 구현해야할 내용을 전달하는 상속목적으로 만들어진 클래스

virtual , =0 (1개 이상의 순수 가상함수를 포함하면 추상 클래스가 된다.)

'개인공부 > C++' 카테고리의 다른 글

C++ 난수 생성  (0) 2023.01.16
union & bit field 로 float 자료형 구현  (0) 2022.12.30
tree erase 구현  (0) 2022.12.15
enum class  (0) 2022.12.14
tree 구현해보기  (0) 2022.12.13