2005년 08월 08일
다중 상속의 virtual
class A
{
public:
int a;
};
class B : virtual public A
{
public:
int b;
};
class C : virtual public A
{
public:
int c;
};
class D : public B, public C
{
public:
int d;
};
우연히 이런 비슷한 소스 발견-_-;;
다중상속을 해본적도 없고 상속에 virtual 을 쓸수 있는 걸 모르고 있었다...
물론 이 상황에서 virtual의 뜻도..
그래서 간단한 테스트를 해봤고, 대충 이해한듯하다
D d;
B *b = &d;
C *c = &d;
A *a1 = b, *a2 = c;
만약 virtual이 없다면
a1 != a2 이 된다
virtual 이 있으면
a1 == a2 이 된다...
즉 virtual 이 있으면 그 클래스는 한번만 포함한다
그렇지 않으면 상속된만큼 포함..인듯
D d; 를 선언했을때
class B : virtual public A
이 부분에서 class B가 class A를 진짜 상속받지 않고
가상으로 (virtual -_-;;) 상속받은 후에
맨 마지막 class D에서 실제로 class A를 상속받는다....
그래서 class A는 한번만 포함된다..
포인터를 비교했을때도 virtual가 없으면 a1, a2가 중간중간에 있었는데
virtual이 있었을때는 a1, a2가 맨뒤쪽에 있었다..
이정도
{
public:
int a;
};
class B : virtual public A
{
public:
int b;
};
class C : virtual public A
{
public:
int c;
};
class D : public B, public C
{
public:
int d;
};
우연히 이런 비슷한 소스 발견-_-;;
다중상속을 해본적도 없고 상속에 virtual 을 쓸수 있는 걸 모르고 있었다...
물론 이 상황에서 virtual의 뜻도..
그래서 간단한 테스트를 해봤고, 대충 이해한듯하다
D d;
B *b = &d;
C *c = &d;
A *a1 = b, *a2 = c;
만약 virtual이 없다면
a1 != a2 이 된다
virtual 이 있으면
a1 == a2 이 된다...
즉 virtual 이 있으면 그 클래스는 한번만 포함한다
그렇지 않으면 상속된만큼 포함..인듯
D d; 를 선언했을때
class B : virtual public A
이 부분에서 class B가 class A를 진짜 상속받지 않고
가상으로 (virtual -_-;;) 상속받은 후에
맨 마지막 class D에서 실제로 class A를 상속받는다....
그래서 class A는 한번만 포함된다..
포인터를 비교했을때도 virtual가 없으면 a1, a2가 중간중간에 있었는데
virtual이 있었을때는 a1, a2가 맨뒤쪽에 있었다..
이정도
# by | 2005/08/08 02:16 | 프로그래밍 팁 | 트랙백 | 덧글(0)



☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]