1. 함수 중복
#include <iostream>
class Weapon
{
public:
virtual void attack() {std::cout << "웨폰" << std::endl;}
};
class Gun : Weapon
{
public:
virtual void attack() override {std::cout << "총" << std::endl;}
};
class Lance:Weapon
{
public:
virtual void attack() override{std::cout << "창" << std::endl;}
};
class GunLance :Weapon, Lance{};
int main()
{
GunLance *gl = new GunLance();
gl->attack();
}
상속 받은 양 부모 모두 같은 기능을 가지고 있고, 실행 가능한 기능이
여러개일 경우, 문제를 발생시킬 확률이 높다.
다중 상속 받는 클래스에서 중복된 함수에 대한 오버라이드를 진행해주면 해결 가능
2. 맴버 중복
사실 이렇게 상속을 받으면, IDnum이라는 맴버 변수도 건랜스 속에 2개가 있게 됨
변수를 사용하려 하면 둘중 어느 IDnum을 써야 할지 모르니 컴파일러가 에러를 냄
버츄얼을 붙인 가상상속을 통해 해결한 모습
가상상속을 하면 이제 맴버 변수는 하나만 존재.
분명 다중 상속을 쓰더라도 해결방법이 있긴 하나,
순수가상함수나 인터페이스와 같은 다른 기능으로도 대체 가능하니 최대한 피하자