3 - 2학기/객체 지향 프로그래밍

객체 지향 프로그래밍 : 상속

harvartz의 일지 2021. 6. 13. 14:53

이번에 배울 개념은 상속이라는 개념이다. 상속은 상당히 많이 쓰이는 개념이기 때문에 꼭 머리속에 담아두고 가자.

 

다음과 같은 목차로 포스팅이 이뤄진다.

1. 상속 개념

2. 파생 클래스 정의 및 객체 생성 방법

3. 파생 클래스의 생성자와 소멸자

4. 접근 지정자와 접근 변경자

5. 다중 상속

 

 

1. 상속 개념

: 기존의 클래스가 가진 기능을 이어 받아 새로운 클래스를 정의하는 것을 의미한다.

부모(기본) 클래스 -> 자식(파생) 클래스 인 경우, 부모 클래스의 특징을 자식 클래스가 이어 받는다.

 

* is - a 관계

상속 관계에 있는 두 클래스 사이에는 is - a 관계가 성립한다.

 

장점

- 간결한 클래스 작성, 파생 클래스를 간결하게 작성 가능하다.

- 계층 분류 및 관리가 편하다.

- 클래스 재사용, 확장이 편하다.

 

2. 파생 클래스 정의 및 객체의 생성 방법

 

 

파생 클래스의 객체 생성

 

 

3. 파생 클래스의 생성자 및 소멸자

파생 클래스 생성자는 항상 내부적으로 기본 클래스 생성자를 호출한다. 

 

기본 클래스의 인자 없는 생성자의 암시적 호출이 이뤄진다.

-> 파생 클래스의 생성자에서 기본 클래스의 생성자가 명시적으로 호출되지 않는다면 자동으로 기본 클래스의 디폴트 생성자가 호출된다. 

 

기본 클래스의 생섲자의 특정한 생성자의 명시적 호출

->  기본 클래스 생성자 중 특정한 생성자를 호출하려면 파생 클래스 생성자에서 초기화 리스트를 사용해야 한다.

 

 

 

 

4. 멤버의 접근 지정에 따른 접근성

5. 다중 상속

두 개의 기본 클래스를 상속 받을 필요가 있는 경우

 

충돌 가능성: 부모 클래스에 같은 이름의 멤버가 있는 경우 충돌한다. 어느 멤버인지 확인을 못하기 때문이다.

 

문제점

기본 클래스 멤버 접근의 모호성

 

가상 상속이라는 개념이 있다.

다중 상속으로 인한 기본 클래스 멤버의 중복 상속 해결

 

1. 파생 클래스의 선언문에서 기본 클래스 앞에 virtual로 선언한다.

2. 파생 클래스의 객체가 생성될 때, 기본 클래스의 멤버 공간을 한번만 할당한다. 이미 할당되어 있다면 그 공간을 공유한다.

3. 기본 클래스의 멤버가 중복하여 생성되는 것을 방지한다.