0. 개요


클래스간에 상속을 받게 되면, 앞의 클래스의 멤버 변수와 멤버 함수를 물려받게 된다.


이때 상속되는 클래스를 부모 클래스 (Parent Class), 기반 클래스 (Base Class), 또는 상위 클래스 (Super Class)

상속받는 클래스를 자식 클래스 (Child Class), 파생 클래스 (Derived Class), 또는 하위 클래스 (Sub Class) 라 부른다.


클래스간의 관계를 그릴 때는, 부모 클래스를 자식 클래스가 화살표로 가리키는 것으로 나타낸다.

부모 <- 자식


1. 사용법


class A : public/protected/private B {};

A가 B를 상속하고 싶을 때 위와 같이 작성한다.


예를 들어 Student class가 Person class를 상속하는 경우는 아래와 같다.



이 경우 Person <- Student 로 나타낸다.


위에서 B 앞의 public, protected, private 상속은 아래와 같은 성질을 가진다.


1-1. public

부모 클래스의 멤버 변수, 멤버 함수들의 성질은 그대로이다.


1-2. protected

부모 클래스의 멤버 변수, 멤버 함수들 중 public 은 protected로 바뀐다.

즉, 부모 클래스의 모든 변수, 함수는 외부에서 접근 불가능해진다.


1-3. private

부모 클래스의 멤버 변수, 멤버 함수가 private으로 바뀐다.

즉, 부모 클래스의 모든 변수, 함수는 외부 및 자식 클래스에서 접근 불가능해진다.


2. 생성자, 소멸자

생성자는 부모 클래스 생성자-자식 클래스 생성자 순으로 불리고, 

소멸자는 반대로 자식 클래스 소멸자-부모 클래스 소멸자 순으로 불린다.


예를 들어, 위의 person과 student를 아래와 같이 바꾸면 결과는 아래와 같다.



실행결과


이는 자식 클래스의 생성자에, 컴파일러가 자동으로 디폴트 생성자를 넣어준 것이다.

아래 결과를 보면, student는 grade 생성자가 불려도 person은 디폴트 생성자가 불린다.



실행결과


이때 다른 생성자를 불러주려면, 멤버 변수 초기화 하듯이 부모 클래스의 생성자를 불러주면 된다.

(부모클래스 생성자부터 불러야 reorder warning이 뜨지 않는다.)



실행결과


부모 클래스에 디폴트 생성자가 없는 경우, 컴파일러가 디폴트 생성자를 부를 수 없으므로, 이렇게 부모 클래스의 생성자를 명시적으로 불러줘야지만 에러가 발생하지 않는다.



'프로그래밍 > C++' 카테고리의 다른 글

함수 바인딩  (0) 2018.10.29
가상 함수 (Virtual Function)  (0) 2018.10.23
연산자 재정의 (Operator overloading)  (0) 2018.07.01
this 포인터  (0) 2017.11.13
상수 멤버 함수 (const member function)  (0) 2017.11.13

+ Recent posts