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 |