[C++] 가상 상속의 메모리 공유
카테고리: Cpp
태그: Inheritance Memory
이 글은 C++ 가상 상속의 메모리 공유를 공부하고 정리한 글입니다
가상 상속
- 만약 다중 상속을 받을 때 밑의 코드처럼 B와 C 클래스가 A클래스를 가상 상속 받은 다음
- D 클래스가 B와 C를 다중 상속 받으면 B와 C는 A클래스를 공유한다
- 그래서 D에서 A클래스를 바꾸거나 B또는 C에서
ChangeName()
을 호출해서 바꾸거나해도 - 똑같은 주소의 mName을 바꾸기 때문에 출력해도 똑같다
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
using namespace std;
class A
{
public :
const char* GetName() const
{
return mName;
}
void SetName(const char* str)
{
strcpy(mName, str);
}
private :
char mName[1024];
};
class B : virtual public A
{
public :
void ChangeName()
{
SetName("BBBB");
}
};
class C : virtual public A
{
public :
void ChangeName()
{
SetName("CCCC");
}
};
class D : public B, public C
{
};
int main()
{
D d;
d.SetName("DDDD");
B& b = d;
C& c = d;
cout << b.GetName() << endl;
cout << c.GetName() << endl;
cout << d.GetName() << endl;
b.ChangeName();
cout << b.GetName() << endl;
cout << c.GetName() << endl;
cout << d.GetName() << endl;
c.ChangeName();
cout << b.GetName() << endl;
cout << c.GetName() << endl;
cout << d.GetName() << endl;
return 0;
}
참조
💻 열심히 공부해서 작성 중이니 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 알려주시면 감사하겠습니다! 😸
댓글 남기기