2015. 4. 1. 03:27ㆍ창고
20일차
상속과 다형성
상속 - 이미 정의되어 있는 클래스의 모든 특성을
물려받아 새로운 클래스를 작성하는 기법
다형성 - polymorphism; 다양한 형태를 가짐
다양성 - 다양한 종류
상속과 다형성을 묶어주는 것이 virtual
virtual이 없다면 다형성이 구현될 수 없다.
용어
상위 클래스, base 클래스, 기본 클래스
하위 클래스, derived 클래스, 파생 클래스
root 클래스 - 최상위, 기본
어떤식으로 상속받을 것인가?
public상속 - 기본 클래스의 모든 속성을 그대로 이어 받는 상속. 기본 파생.
protected상속 - protected 이하의 속성들의 모든 접근 제어를 protected로 이상으로 만든다.
기본 클래스의 public을 protected로 만듬으로써 외부에 가리는 역할을 한다.
private상속 - 자식에게 조차 모두 private로 숨기는것. 모든 권한을 private.
어디에 쓰는가? 특별한 상황에서 사용한다.
빈클래스를 이용하는 기법에서 사용. 단일체 클래스. 이펙티브C++
상속을 받은 클래스는 상속한 클래스와 같거나 커야한다.
class B classD
A A
B B
C
B = D; 부모에게 자식을 넣는다. up casting.
C를 버리고 부모 A,B만 취한다.
안전하다!
D = B; 자식에게 부모를 넣는다. down casting.
부모 클래스가 C만큼 늘어나야한다.
안전하다는 것을 보장하지 않는다. 위험한 캐스팅.(스태틱 캐스팅; 기본 캐스팅, C형)
위험한 캐스팅이지만.. 되게하는 경우?
dynamic_cast(RTTI로 계층구조에서 확인하고 가능하면 해준다.)
하지만 느리다!!!!!!!!!! 왜냐면 RTTI의 구조를 확인하러 가야하기때문.
위험한 캐스팅 -> NULL 반환. 그래서 느리다.
다이나믹 캐스팅을 썼다면? 항상 NULL 채킹!!
기타
cont_casting 잠시 상수화를 벗기는 것.
reinterpreter_casting 말도 안되는 코드가 가능하다!.
주소 -> 정수로 사용. 컴파일러마다 다르게 수행할 수 있다.
기본 상속.
is a와 has a
is a - 동물은 생물이다. 하지만 생물은 동물이 아니다. 큰 범위가 작은 범주를 포함하는 형태.
하위 클래스가 포함으로 들어가기 좋다. 상위 클래스 전체를 하위 클래스가 상속하여 쓰기는 애매하다.
has a - 면>선>점, 면이 선을 가지고 있다. 끈끈한 관계. 점이 없으면 선이 없고 선이 없으면 면이 없다!
생물에서 동물을 잘라내도 상관없다.(포함) - 느슨한 관계
면,선,점에서 점을 잘라내면 난리가 난다.(상속) - 끈끈한 관계
-- 응집도, 결합도 <- 관련 찾아보면 좋을 듯. c?pling, cohension? 이거였나..?
정적바인딩, 동적바인딩 예제 꼭 한번 다시 보기! 수업 프로젝트 17
객체 -> 멤셋 초기화하면 큰일남.
'창고' 카테고리의 다른 글
[Markdown] Tistory에서 마크다운 사용하기 (0) | 2019.03.04 |
---|---|
WinApi 정복 6장 (그래픽) (0) | 2015.04.14 |
지식인! (0) | 2015.04.05 |
국기 정규수업 19일차 메모 (0) | 2015.03.30 |
국기 정규수업 17~18일차 메모 (0) | 2015.03.30 |
케이미피케이션 세미나 게임은 정치다! (0) | 2015.03.27 |
국기 정규수업 14~16일차 메모 (2) | 2015.03.25 |