다중상속

Min·2024년 7월 14일
0

CPP

목록 보기
9/14
post-thumbnail

다중상속

  • 다중상속이란?
    하나의 파생 클래스가 여러 베이스 클래스로부터 상속을 받는 것입니다.

  • 왜 씁니까?
    기능을 클래스로 모듈화하여, 필요한 여러 기능을 상속 받는 형태로 편리하게 사용 가능하기 때문입니다.

  • 어떻게 쓰면 좋을까요?
    다중 상속과 추상 클래스를 활용하여, 객체 지향 언어의 인터페이스 문법을 구현할 수 있습니다.

  • 사용 시 주의사항
    Diamond Problem이란 다이아몬드 형태로 상속을 받을 때 일어나는 문제입니다. 상속받는 Base클래스에 대한 모호성이 생깁니다

#include <iostream>

class Base
{
public:
	virtual void Function()
	{
		std::cout << "Base Func" << std::endl;
	}
};

class DerivedLeft : public Base
{
public:
	void Function() override
	{
		std::cout << "DerivedLeft Func" << std::endl;
	}
};

class DerivedRight : public Base
{
public:
	void Function() override
	{
		std::cout << "DerivedRight Func" << std::endl;
	}
};

class MultipleDerived : public DerivedLeft, public DerivedRight
{
public:
	void Function() override
	{
		std::cout << "MultipleDerived Func" << std::endl;
	}
};

int main() 
{	
	MultipleDerived* MultipleDerivedPtr = new MultipleDerived;

	MultipleDerivedPtr->DerivedLeft::Function(); // 같은 이름의 멤버 변수, 멤버 함수를 사용하게 되면, 모호성이 생기기 때문에 어떤 클래스의 함수를 호출했는지 명시해야함
	MultipleDerivedPtr->DerivedRight::Function(); // 클래스명::을 붙여줌으로, 모호성을 해소

	DerivedLeft* LeftPtr = MultipleDerivedPtr;
	DerivedRight* RightPtr = MultipleDerivedPtr;
	//Base* BasePtr = MultipleDerivedPtr; //Upcasting하는 클래스가 DerivedLeft인지, DerivedRight인지 모호함(Diamond Problem)

	return 0;
}
profile
티내는 청년

0개의 댓글