Nagie's DevStory

[CPP] 33. 다중 상속 (Multiple inheritance) 본문

Programming/C++

[CPP] 33. 다중 상속 (Multiple inheritance)

Nagie 2023. 10. 22. 18:07
728x90

다중 상속은 클래스가 두 개 이상의 부모 클래스에서 특성( 데이터 멤버, 멤버 함수)을 상속할 수 있게 한다.

이에 따라 파생 클래스는 여러 부모 클래스의 데이터 멤버와 멤버 함수를 모두 가질 수 있으며

서로 관련 있는 클래스에서 특성을 상속 하거나 클래스 계층 구조에서 여러 부모 클래스로 부터 상속받아

새로운 클래스를 만들 때 또는 다형성을 활용하여 다양한 부모 클래스에서 파생한 객체를 다룰 때 사용한다.

다만 주의할 점이 있는데 다중 상속을 사용할 때는 상속 충돌 문제가 발생할 수 있다.

이걸 죽음의 다이아몬드 문제라고 부르며 하나의 클래스가 둘 이상의 경로를 통해 같은 기본 클래스를 상속할 때 발생한다.

C++에서는 가상 상속(virtual inheritance)을 사용해 이 문제를 해결하지만

코드의 가독성과 유지 보수를 어렵게 만드니 되도록 사용하지 않는 게 좋다.

 

class A {
public:

    void funcA() {
        // ...
    }
};

class B {
public:

    void funcB() {
        // ...
    }
};

class C : public virtual A, public virtual B { //가상 상속
public:

    void funcC() {
        // ...
    }
};

int main() {

    C obj;
    obj.funcA(); // A 클래스에서 상속한 함수
    obj.funcB(); // B 클래스에서 상속한 함수
    obj.funcC(); // C 클래스의 함수
}

 

 

자세한 이야기는 아래의 링크를 참고해 읽어보면 좋다.

 

다중 상속 (위키피디아)

 

Multiple inheritance - Wikipedia

From Wikipedia, the free encyclopedia In software, to have several parent classes Multiple inheritance is a feature of some object-oriented computer programming languages in which an object or class can inherit features from more than one parent object or

en.wikipedia.org

다중 상속 (나무위키)

 

 

상속(프로그래밍) - 나무위키

한 번 파생받은 클래스에서 또 파생되는 경우, 파생 클래스 바로 위의 클래스를 직접 클래스(direct class), 그 위의 클래스를 간접(indrect) 클래스라고 칭한다. 어느정도 규모가 되는 실 프로젝트에

namu.wiki

 

728x90
Comments