C++/Class 2021. 3. 20. 17:28

다중 상속

  • 여러 클래스에서 상속을 받을 수 있다.

    #include <iostream>
    
    class USBDevice
    {
      int    id_;
    
    public:
      USBDevice(int id_in) : id_(id_in) {}
    
      int    getID() { return id_; }
    
      void plugAndPlay() {}
    };
    
    class NetworkDevice
    {
      int    id_;
    
    public:
      NetworkDevice(int id_in) : id_(id_in) {}
    
      int    getID() { return id_; }
    
      void networking() {}
    };
    
    class USBNetworkDevice : public USBDevice, public NetworkDevice
    {
    public:
      USBNetworkDevice(int usb_id, int net_id)
        : USBDevice(usb_id), NetworkDevice(net_id)
      {}
    
      USBNetworkDevice(int common_id)
        : USBDevice(common_id), NetworkDevice(common_id)
      {}
    };
    
    int        main()
    {
      using namespace std;
    
      USBNetworkDevice    my_device(42, 1024);
    
      my_device.networking();
      my_device.plugAndPlay();
    
      cout << my_device.USBDevice::getID() << endl;
      cout << my_device.NetworkDevice::getID() << endl;
    }
    
    /* stdout
    42
    1024
    */

  • 다이아몬드 상속

    • 같은 부모 클래스를 상속받은 두 개의 클래스들을 또 다시 다중 상속받은 손자 클래스의 형태를 다이아몬드 상속이라고 한다.

    • 보기 드문 패턴인 듯하다.

    • 다중 상속을 잘못 사용하면 문제가 발생할 수 있다고 한다.

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

C++ 다형성의 기본 개념  (0) 2021.03.20
C++ 다형성 (Polymorphism)  (0) 2021.03.20
C++ 상속받은 멤버의 접근 권한 변경  (0) 2021.03.20
C++ 함수 오버라이딩  (0) 2021.03.20
C++ 상속과 접근 지정자  (0) 2021.03.20