국기 정규수업 20일차 메모

2015. 4. 1. 03:27창고

728x90
728x90

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

객체 -> 멤셋 초기화하면 큰일남. 






728x90
반응형