article thumbnail image
Published 2022. 9. 18. 14:32

다이아몬드 상속의 문제점은 상속의 모호성이다. 부모 클래스가 상속하는 메서드들이 중복된다면, 컴파일 에러를 일으킨다. 이에 대한 해결방안으로는 중복된 메서드를 제거함으로써 모호성을 제거하는 것이었지만, virtual 상속을 이용한다면, 메서드를 제거하지 않고도, 모호성 문제를 해결할 수 있다.

class Hero{
public:
	virtual void SpecialMove() = 0;
	virtual void Attack(){ cout << "Attack" << endl; }
};

class KamenRider : public virtual Hero{
public:
	virtual void SpecialMove(){
		cout << "Kamen Punch" << endl;
	}
};

class PowerRanger : public virtual Hero{
public:
	virtual void SpecialMove(){
		cout << "Power Punch" << endl;
	}
};

class KamenPowerRiderRanger : public KamenRider,public PowerRanger{
public:
	virtual void SpecialMove(){
		KamenRider::SpecialMove();
		PowerRanger::SpecialMove();
		cout << "이얐" << endl;	
	}
};

'C++' 카테고리의 다른 글

[C++11] Move Semantic에 대한 간단한 설명  (1) 2022.09.23
[C++] Iterator, 반복자  (1) 2022.09.19
[C++20] Concepts  (0) 2022.09.17
값 카테고리, 타입 카테고리  (0) 2022.07.04
Type Category Testing_2(형 카 검-컴포지트 타입)  (0) 2022.07.04
복사했습니다!