2.1. 내용 ¶
상속 : 기존 클래스의 기능 확장(재활용)
생성자의 호출 순서 -> 상위 클래스의 생성자 -> 자식 클래스의 생성자
IS-A 관계 -> 상위 클래스의 포인터로 자식 클래스를 참조할 수 있음
다형성(polymorphism) : 상위 클래스의 포인터로 하위 클래스를 생성했을 때, 자식 클래스에서 오버라이딩 한 메소드를 호출할 수 있음
C++에서 다형성을 위해 virtual을 사용함
- 클래스 안에 virtual 선언된 멤버가 있는 경우 클래스 내부에 vtable을 만들어 함수 포인터를 저장함
RTTI(Run-Time Type Information)
부모 클래스 생성자 호출(디폴트 생성자를 호출하는 경우가 아니면) 클래스 생성자에 콜론을 이용해서 부모 클래스의 생성자를 초기화 할 수 있음
캐스팅: 상속 관계상에서 캐스팅을 하는 경우
dynamic_cast -> 런타임에 캐스팅
부모 클래스로 포인터 캐스팅 : 업 캐스팅
자식 클래스로 포인터 캐스팅 : 다운 캐스팅
abstract base class
- 메소드를 순수 가상 함수(pure virtual method) 형태로 선언
- 해당 클래스만으로는 클래스를 생성할 수 없음.
override 키워드 - 식별이 쉬움
부모 클래스에서 어떤 메소드를 오버로딩 형태로 구현했는데, 자식 클래스에서 오버로딩된 메소드 중 하나를 override 키워드로 선언할 경우, override 키워드 선언한 해당 메소드를 제외한 나머지 오버로딩된 메소드들은 가려져서 접근할 수 없게됨.
상속 방지 - 클래스 선언 시 final 키워드를 사용
override 방지 - 해당 메소드에 final 키워드 사용
클래스 접근 제어자(public, private, protected)
생성자의 호출 순서 -> 상위 클래스의 생성자 -> 자식 클래스의 생성자
IS-A 관계 -> 상위 클래스의 포인터로 자식 클래스를 참조할 수 있음
다형성(polymorphism) : 상위 클래스의 포인터로 하위 클래스를 생성했을 때, 자식 클래스에서 오버라이딩 한 메소드를 호출할 수 있음
C++에서 다형성을 위해 virtual을 사용함
- 클래스 안에 virtual 선언된 멤버가 있는 경우 클래스 내부에 vtable을 만들어 함수 포인터를 저장함
RTTI(Run-Time Type Information)
부모 클래스 생성자 호출(디폴트 생성자를 호출하는 경우가 아니면) 클래스 생성자에 콜론을 이용해서 부모 클래스의 생성자를 초기화 할 수 있음
캐스팅: 상속 관계상에서 캐스팅을 하는 경우
- 서브 클래스로 캐스팅 : 캐스팅 연산자를 구현해야 함
- 부모 클래스로 캐스팅 : 부모 클래스에 해당하는 멤버 변수만 남음
static_cast -> 컴파일 타임에 캐스팅- 부모 클래스로 캐스팅 : 부모 클래스에 해당하는 멤버 변수만 남음
dynamic_cast -> 런타임에 캐스팅
부모 클래스로 포인터 캐스팅 : 업 캐스팅
자식 클래스로 포인터 캐스팅 : 다운 캐스팅
abstract base class
- 메소드를 순수 가상 함수(pure virtual method) 형태로 선언
- 해당 클래스만으로는 클래스를 생성할 수 없음.
override 키워드 - 식별이 쉬움
부모 클래스에서 어떤 메소드를 오버로딩 형태로 구현했는데, 자식 클래스에서 오버로딩된 메소드 중 하나를 override 키워드로 선언할 경우, override 키워드 선언한 해당 메소드를 제외한 나머지 오버로딩된 메소드들은 가려져서 접근할 수 없게됨.
상속 방지 - 클래스 선언 시 final 키워드를 사용
override 방지 - 해당 메소드에 final 키워드 사용
클래스 접근 제어자(public, private, protected)