[C++] 가상 상속의 메모리 공유

Date:     Updated:

카테고리:

태그:

이 글은 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;
}


참조

포큐아카데미 C++ 언매니지드 프로그래밍



💻 열심히 공부해서 작성 중이니 오류나 틀린 부분이 있을 경우 
  언제든지 댓글 혹은 메일로 알려주시면 감사하겠습니다! 😸

맨 위로 이동하기

Cpp 카테고리 내 다른 글 보러가기

댓글 남기기