본문 바로가기
정상을향해/Languages

상속 (Inheritance)

by 사이테일 2013. 11. 11.

다음 소스코드를 보자.

 

<UnivStudentInheri.cpp>

 

 

25번째행에서 다음의 선언이 의미하는 바가 'public 상속'이다.

 

class UnivStudent : public Person

{

          . . .

}

 

그리고 WhoAreYou() 멤버함수를 살펴보자. (35행)

 

UnivStudent 클래스에는 WhatYourName 함수와 HowOldAreYou 함수가 정의되어 있지 않음에도 불구하고,

 

이 두 함수를 호출할 수 이유가 바로

 

UnivStudent 클래스가 Person 클래스를 상속했기 때문이다.

 

즉, 이 두 함수는 Person 클래스의 멤버함수이기 때문에 호출이 가능하다.

 

(이 것이 상속의 가장 두드러진 특징이다.)

 

 

여기서 하나의 의문점이 생긴다.

 

UnivStudent 클래스의 생성자는 Person 클래스의 멤버까지 초기화해야 할 의무가 있을까?

 

결과부터 따져보면 초기화해야 할 의무가 있다는 것이 답이다.

 

그렇다면 어떻게 초기화하는 것이 좋을까?

 

UnivStudent 클래스의 생성자가, Person 클래스의 생성자를 호출해서 Person 클래스의 멤버를 초기화 하는 것이 좋다.

 

(위 코드 30행에 나와있는 것처럼...)

 

 

여기서 또 하나 생기는 의문.

 

UnivStudent 클래스의 멤버함수(또는 생성자) 내에서는 Person 클래스에 private로 선언된 멤버변수에 접근가능할까?

 

접근제한의 기준은 클래스이다. (객체가 아니다.)

 

클래스의 외부에서는 private 멤버에 접근이 불가능하다.

 

따라서 UnivStudent의 멤버함수 내에서는 Person의 멤버변수에 직접 접근은 불가능하다.

 

 

 

출처 : 열혈 C++ 프로그래밍 (윤성우 저)