클래스를 사용하면서 객체 포인터를 많이 사용하게 된다. (클래스를 가리키는 포인터)
이에 해당 관계에 대해서 소스를 작성하면서 알아보자.
[ IS-A 관계 ]
이전에 IS-A 관계를 떠올려 보면 A의 객체는 B이고 B의 객체는 C이다.
즉 C는 A의 객체 이다. 그럼 아래와 같은 코드는 정상적으로 작동될 것이다.
[결과]
a,b,c가 A 클래스 포인터이기 때문에 A 클래스의 객체를 가르켜도 무방하다.
즉, B,C의 클래스를 가르켜도 무방하다. 또한 같은 A클래스의 포인터 이지만 각기 다른 클래스 객체를
가리키므로 메모리 주소는 각기 상이하다.
그럼 B 클래스 포인터를 A 객체를 가르키면 어떻게 될까? 위에서도 이야기 했지만
IS-A 관계에서는 B는 A다 라는 말은 성립되지만, A는 B다 라는것은 성립되지 않는다.
당연하겠지만 다음과 같이 포인터를 동적할당 하려고 하면, 컴파일 오류가 발생한다.
수식이 일반적으로 생각하는 IS-A 관계에서와 반대되는 개념인데, 즉 객체를 가르킨다는 것은 일반적으로 생각하는 IS-A와 반대되는 개념이다.
아래와 같은 코드를 보자.
[결과]
각기의 클래스는 본래 자신의 클래스에만 접근할 수 있다.
이에 A라는 클래스는 자신의 클래스만을 접근할 수 있는 반면 , C라는 클래스는 B와 A의 객체가 되므로 A,B,C의 맴버 변수와 맴버 함수에 접근할 수 있다. (IS-A 관계를 생각해보자. 쉽게 할아버지의 특성을 가지고 있는 아버지가 나를 낳았을때는 할아버지와 아버지의 특성 모두를 가지고 있는 것 이다.)
위 관계로 인해 아래와 같은 코드 또한 가능하다.
[결과]
이때 처음의 클래스 C와 나머지 a,b의 클래스의 메모리 주소는 같다. (당연하다. 굳이 설명은 생략)
또한 이때 접근 가능한 멤버변수와 멤버함수는 다음과 같다.
[접근 가능한 멤버 변수와 멤버 함수]
a = Class A 의 멤버변수, 함수만 접근 가능
b = Class A 와 Class B 멤버변수, 함수만 접근 가능
c = 상속된 모든 클래스의 멤버변수, 함수에 접근 가능
'프로그래밍 > C++' 카테고리의 다른 글
[ C++]클래스 상속(4) - 순수 가상 함수 & 다중 상속 (0) | 2015.09.29 |
---|---|
[ C++]클래스 상속(3) - 가상 함수 (0) | 2015.09.29 |
[ C++]클래스 상속(1) - 상속을 위한 조건 (0) | 2015.09.24 |
[C++] 구조체 (직접참조와 간접참조) (0) | 2015.09.11 |
C 언어 - define과 inline 함수 (0) | 2015.08.25 |