부모로부터 상속받은 함수가 자신의 목적에 맞지 않을 경우 자식 클래스가 함수를 재정의 할수있다
부모와 자식 클래스는 다음 두개의 지정자를 함수 앞에 붙여 재정의되는 함수라는 것을 표시한다
virtual
- 부모 클래스의 함수 앞에 붙이며 자식 클래스에 의해 재정의될 수 있다는 뜻이다
override
- 자식 클래스의 함수 앞에 붙이며 부모로부터 상속받은 함수와는 다르게 구현한다는 뜻이다

부모가 재정의를 허가해야만 자식이 재정의를 할 수 있으므로 이 두 지정자는 보통 짝을 이루며 사용된다





- 부모 클래스에 virtual 을 뺴고, 자식 클래스에 override 를 new로 바꾸면 Message는 비가상 메소드가 된다

- 객체가 선언된 타입을 정적 타입
- 실제 가리키고 있는 타입을 동적 타입
- B2의 정적 타입은 Base, 동적 타입은 Derived

Base B2 = D
여기서 Base 타입을 따르면 비가상 함수
여기서 D 타입을 따르면 가상 함수

비가상 메소드 - 항상 호출 객체의 타입, 정적 타입을 따른다
                    - Message가 비가상일때는 B2가 Base로 선언되었으므로 Base의 메소드가 호출
가상 메소드 - 호출 객체가 실제로 가리키고 있는 아팁, 동적 타입을 따른다
                 - Message가 가상일때는 B2가 Base타입이지만 Derived 객체를 가리키고 있으므로 Derived의 메소드가 호출

Posted by 코딩하는 야구쟁이
,