(review)
상속 : 재사용성, 확장성(내가 가지고 없는 것을 만듦)
부모에게 값을 넘길 때 콜론 초기화로 넘겨준다
오버라이딩 : 부모와 자식 간에 똑같은 형태로 존재하는 것
동적 바인딩 : 부모가 자식을 접근하는 방식
접근 방식은 같은데 cpp에서 돌아가는 내부 구조가 다르다!
상속을 했을 때 개념 2개
정적 바인딩 : 내 거 만들면 내가 쓰는거야 ( 내거 가지고 접근하는 방식 )
동적 바인딩 : A 타입의 포인터로 B 객체에 접근하는 것
타입이 다르면 에러난다! But, 상속, 정확히 말해서 is-a 관계에서일때
is-a 관계에 있다는 건 하나의 흐름이라고 여겨지기 때문에 부모로 자식에게 접근할 수 있다!
왜 쓰나?
사용자 위주
접근하는 방식이 정적으로도 동적으로도 쓸 수 있어야 한다, But, 같은 서비스를 해줘야 한다!(제한적인 부분이 있긴 함)
다중 상속의 개념 : 여러 개를 받는 거야
다중 상속의 장점
동시에 여러개를 받을 수 있음
단점
데이터 관리가 쉽지 않다(데이터의 출처흐름을 파악하기 쉽지 않음)
그래서 덜 쓰는 게 좋다!
정리 : 단일 상속을 원칙으로 하되, 필요한 경우에만
항상 상속 방식을 명시해라! (default는 private다! ! !)
가상 상속을 하면 마치 다중 상속을 하는 것 처럼 ... 가 된다
* 가상 상속할 시 주의할 점
1. 상속 방식을 꼭 사용할 것! (실수 많이 하는 것)
-> default : private 상속!
2. 모호성이 발생하지 않게 끔 하는 게 중요하다 => 해결하기 위해 가상 상속으로 처리해줘야 한다
3. 값을 넘길 때(가상 상속을 했을 때)외부에서 콜론 초기화를 써야 되는데 메모리 구조에 맞게끔 넘겨야 한다!
cf. 자바에서는 이런 모호한 경우가 많다보니 아예 싹 없애버리고 public 상속 한개만 남겨뒀다!
그럼 자바는 다중 상속이 없나? (x) -> 인터페이스가 있다
인터페이스는 왜 다중 상속이 되냐?(복잡할 일이 없다!)
(옮길것) 추상화 : ex. 햄버거는 빵에 패티 상추 올리고 다시 빵으로 닫는다