Chapter 4. 상속(Inheritance)
1. 상속이란
- 상속은 객체지향의 주요 특성인 모듈의 재사용과 코드의 간결성을 제공한다.
- 상속은 확장의 개념으로 상위 Class의 모든 요소를 상속받고 추가 요소를 더 가지는 개념이다.
- 상속은 다중으로 사용할 수 있으며 이를 다중상속이라 한다.
- 상속의 관계
‧ 상속 관계는 상속을 받는 Class와 상속을 해주는 Class로 나뉜다.
‧ 자식 Class가 상속 받는 방법은 Class 이름 뒤에 콜론(:)을 붙이고 상속할 Class 이름을 붙인다.
‧ 상속 해주는 Class : Base Class, Super Class, 부모 Class
‧ 상속 받는 Class : 파생 Class, Sub Class, 자식 Class
2. 상속의 특징
- 접근제어
‧ 상속 관계에서도 접근제어는 유효하며 접근방법도 같다.
‧ 접근제어의 범위 : private < protected < public
예약어 |
범위 |
public |
선언된 Class 내외 어디서든 접근 가능 |
private |
선언된 Class 내에서만 사용가능 |
protected |
자신의 Class 내와 상속된 Class까지만 접근 가능 |
- 상속제어
‧ 상속 제어는 Class를 상속 받을 때 상속 받을 Class의 접근제어를 결정하며 세 가지의 상속제어가 존재한다.
예약어 |
범위 |
public |
Super Class의 멤버 변수의 접근 제어를 그대로 물려받는다. |
private |
Super Class의 public 멤버 변수를 protected로 변경해서 물려받는다. |
protected |
Super Class의 모든 멤버 변수를 private로 변경해서 물려받는다. |
- 생성자 호출 순서
‧ 상속 받은 Sub Class에서 생성자가 실행될 때 Super Class의 생성자가 먼저 실행된 후 Sub Class의 생성자가 실행된다.
- 상속 Class의 객체 형 변환
‧ 상속 관계에서 Super Class 변수는 Sub Class 변수에 대입 불가능
◦ Sub Class 변수에 Super Class 변수를 대입하려고 하면 Super Class의 멤버 변수에 Sub Class가 직접 접근이 불가능해 대입이 불가능하다
‧ 상속 관계에서 Sub Class 변수는 Super Class 변수에 대입 가능
◦ Super Class 변수에 Sub Class 변수를 대입할 땐 Sub Class 생성자가 Super Class 생성자로 만들어 지기 때문에 대입이 가능하다.
- 상속 관계에서의 함수 오버라이딩(Overriding)
‧ 상속 관계에서 Sub Class에서 Super Class의 함수를 재 정의해 사용할 때 Class 변수가 Sub Class 변수라면 Sub Class에 재 정의된 함수가 호출된다.
‧ 함수를 재 정의할 때는 Super Class의 함수와 Sub Class의 함수가 이름과 매개변수가 동일해야한다.
- Binding
‧ 함수 호출과 실제 함수를 연결하는 방법을 말하며 동적(Dynamic) Binding과 정적(Static) Binding으로 나뉜다.
‧ C++는 기본적으로 정적 Binding을 수행한다.
‧ 동적 Binding을 사용하려면 virtual 예약어를 사용해 함수를 정의해야한다.
3. Virtual
- 가상 함수(Virtual Function)
‧ 정적 Binding을 할 때 사용하는 예약어인 virtual으로 선언된 함수
‧ 일반 함수 : 컴파일 호출할 함수의 데이터형을 보고 호출할 함수를 결정
‧ 가상 함수 : 실행할 때 포인터가 가리키는 데이터형에 따라 호출할 함수를 결정
‧ 가상 소멸자(Virtual Destructor)
◦ virtual로 선언된 생성자 함수는 동적 할당이 되는 함수이기 때문에 동적 할당을 해제해야 하는데 이때 쓰이는 함수를 말한다.
◦ 가상 소멸자를 정의해 주지 않으면 메모리 누수가 발생한다.
- 순수 가상 함수(Pure Virtual Function)
‧ 함수의 정의 없이 선언만 되어 있는 가상 함수
‧ 오버라이딩(Overriding)의 관계를 목적으로 정의된 함수들은 사용될 내용과 형식, 용도가 같아 정의 내용이 필요 없기 때문에 순수 가상 함수로 선언한다.
‧ 가상 함수의 선언 뒤에 =0을 붙이면 순수 가상 함수가 된다.
‧ 추상(Abstract) Class
◦ 하나 이상의 멤버 함수가 순수 가상 함수인 Class
◦ 추상 Class는 함수의 정의가 생략되어 완전한 Class가 아니기 때문에 객체화 하지 못한다.
'C++' 카테고리의 다른 글
Chapter 6. C++의 또 다른 기능 (0) | 2015.08.05 |
---|---|
Chapter 5. 연산자 오버로딩(Operator Overloading) (0) | 2015.08.05 |
Chapter 3. 객체지향 프로그래밍(Object Oriented Programming) (0) | 2015.08.05 |
Chapter 2. C++의 메모리 동적 할당 (0) | 2015.08.05 |
Chapter 1. C++의 개요 (0) | 2015.08.05 |