C++의 상속

C++의 상속

상속은 기본 개념이다. OOP(객체 지향 프로그래밍) . 이는 한 클래스가 다른 클래스의 기능(필드 및 메서드)을 상속하도록 허용하는 메커니즘입니다. 상속이란 기존 클래스를 기반으로 새 클래스를 만드는 것을 의미합니다. 다른 클래스에서 상속되는 클래스는 해당 클래스의 메서드와 필드를 재사용할 수 있습니다.

예: 다음 예제에서 Animal은 기본 클래스이고 Dog Cat 및 Cow는 Animal 클래스를 확장하는 파생 클래스입니다.

동물_클래스Inheritance C++
   #include          using     namespace     std  ;   class     Animal   {      public  :      void     sound  ()      {      cout      < <     'Animal makes a sound'      < <     endl  ;      }   };   class     Dog     :     public     Animal   {      public  :      void     sound  ()      {      cout      < <     'Dog barks'      < <     endl  ;      }   };   class     Cat     :     public     Animal   {      public  :      void     sound  ()      {      cout      < <     'Cat meows'      < <     endl  ;      }   };   class     Cow     :     public     Animal   {      public  :      void     sound  ()      {      cout      < <     'Cow moos'      < <     endl  ;      }   };   int     main  ()   {      Dog     d  ;      d  .  sound  ();      Cat     c  ;      c  .  sound  ();      Cow     cow  ;      cow  .  sound  ();      return     0  ;   }   

산출
Dog barks Cat meows Cow moos  

설명:

  • Animal은 sound() 함수가 있는 기본 클래스입니다.
  • Dog Cat 및 Cow는 각각 고유한 sound() 메서드를 정의하는 파생 클래스입니다.
  • Main()에서는 Dog Cat과 Cow의 객체가 별도로 생성됩니다.
  • 각 객체에서 sound()를 호출하면 해당 하위 클래스 메서드가 실행됩니다(개가 짖고 고양이가 야옹하고 소가 무스).

통사론

C++
   class     ChildClass     :     public     ParentClass   {      // Additional fields and methods   };   

C++에서 상속은 어떻게 작동하나요?

콜론(:) 액세스 지정자 C++에서는 상속에 사용됩니다. 파생 클래스(자식 클래스)가 기본 클래스(상위 클래스)의 데이터 멤버(필드)와 멤버 함수(메서드)를 상속할 수 있습니다.
클래스가 다른 클래스를 상속하면 상위 클래스의 액세스 가능한 모든 멤버를 가져오고 하위 클래스도 해당 멤버를 재정의(재정의)하거나 새 기능을 추가할 수 있습니다.

C++의 상속 유형

계승

다음은 C++에서 지원되는 다양한 유형의 상속입니다.

1. 단일 상속

단일 상속에서는 하위 클래스가 하나의 상위 클래스에서만 파생됩니다. 단일 부모 클래스의 속성과 동작을 상속합니다. 때로는 단순 상속이라고도 합니다.

상속Single Inheritance C++
   #include          using     namespace     std  ;   class     Vehicle     {   public  :      Vehicle  ()     {      cout      < <     'This is a Vehicle'      < <     endl  ;      }   };   class     Car     :     public     Vehicle     {   public  :      Car  ()     {      cout      < <     'This Vehicle is Car'      < <     endl  ;      }   };   int     main  ()     {          Car     obj  ;      return     0  ;   }   

산출
This is a Vehicle This Vehicle is Car  

2. 다중 상속

~ 안에 다중 상속 하나의 클래스는 둘 이상의 슈퍼클래스를 가질 수 있으며 모든 상위 클래스의 기능을 상속받을 수 있습니다.

Multiple_inheritanceMultiple Inheritance C++
   #include          using     namespace     std  ;   class     LandVehicle   {      public  :      void     landInfo  ()      {      cout      < <     'This is a LandVehicle'      < <     endl  ;      }   };   class     WaterVehicle   {      public  :      void     waterInfo  ()      {      cout      < <     'This is a WaterVehicle'      < <     endl  ;      }   };   // Derived class inheriting from both base classes   class     AmphibiousVehicle     :     public     LandVehicle       public     WaterVehicle   {      public  :      AmphibiousVehicle  ()      {      cout      < <     'This is an AmphibiousVehicle'      < <     endl  ;      }   };   int     main  ()   {      AmphibiousVehicle     obj  ;      obj  .  waterInfo  ();      obj  .  landInfo  ();      return     0  ;   }   

산출
This is an AmphibiousVehicle This is a WaterVehicle This is a LandVehicle  

3. 다단계 상속

C++의 다단계 상속은 클래스가 상속 체인을 형성하는 다른 파생 클래스에서 파생된다는 의미입니다.

다단계_상속Multilevel Inheritance C++
   #include          using     namespace     std  ;   class     Vehicle   {      public  :      Vehicle  ()      {      cout      < <     'This is a Vehicle'      < <     endl  ;      }   };   // Derived class from Vehicle   class     FourWheeler     :     public     Vehicle   {      public  :      FourWheeler  ()      {      cout      < <     '4 Wheeler Vehicles'      < <     endl  ;      }   };   // Derived class from FourWheeler   class     Car     :     public     FourWheeler   {      public  :      Car  ()      {      cout      < <     'This 4 Wheeler Vehicle is a Car'      < <     endl  ;      }   };   int     main  ()   {      Car     obj  ;      return     0  ;   }   

산출
This is a Vehicle 4 Wheeler Vehicles This 4 Wheeler Vehicle is a Car  

4. 계층적 상속

계층적 상속에서는 하나 이상의 하위 클래스가 단일 기본 클래스에서 상속됩니다. 즉, 단일 기본 클래스에서 둘 이상의 파생 클래스가 생성됩니다. 예를 들어 자동차와 버스는 모두 차량입니다.

계층적_상속Hierarchical Inheritance C++
   #include          using     namespace     std  ;   class     Vehicle   {      public  :      Vehicle  ()      {      cout      < <     'This is a Vehicle'      < <     endl  ;      }   };   class     Car     :     public     Vehicle   {      public  :      Car  ()      {      cout      < <     'This Vehicle is Car'      < <     endl  ;      }   };   class     Bus     :     public     Vehicle   {      public  :      Bus  ()      {      cout      < <     'This Vehicle is Bus'      < <     endl  ;      }   };   int     main  ()   {      Car     obj1  ;      Bus     obj2  ;      return     0  ;   }   

산출
This is a Vehicle This Vehicle is Car This is a Vehicle This Vehicle is Bus  

5. 하이브리드 상속

두 가지 이상의 상속 유형이 하나의 프로그램에 결합된 경우. 예를 들어 클래스는 다중 상속을 사용하고 다중 레벨 상속 체인의 일부일 수도 있습니다.

하이브리드상속Hybrid Inheritance C++
   #include          using     namespace     std  ;   class     Vehicle   {      public  :      Vehicle  ()      {      cout      < <     'This is a Vehicle'      < <     endl  ;      }   };   class     Fare   {      public  :      Fare  ()      {      cout      < <     'Fare of Vehicle'      < <     endl  ;      }   };   class     Car     :     public     Vehicle   {      public  :      Car  ()      {      cout      < <     'This Vehical is a Car'      < <     endl  ;      }   };   class     Bus     :     public     Vehicle       public     Fare   {      public  :      Bus  ()      {      cout      < <     'This Vehicle is a Bus with Fare'  ;      }   };   int     main  ()   {      Bus     obj2  ;      return     0  ;   }   

산출
This is a Vehicle Fare of Vehicle This Vehicle is a Bus with Fare 

하이브리드 상속으로 인해 다이아몬드 문제 C++에서. 이는 클래스가 동일한 기본 클래스를 공유하는 두 클래스에서 상속될 때 발생합니다. 결과적으로 파생 클래스는 기본 클래스 멤버의 여러 복사본을 가져오므로 어떤 멤버를 사용할지 모호해집니다.

메모 : 해결책은 가상 상속을 사용하여 기본 클래스의 단일 복사본만 공유하는 것입니다.

C++ 상속의 장점

  • 코드 재사용성 : 파생 클래스는 코드 중복을 피하면서 기본 클래스의 데이터 멤버와 메서드를 직접 재사용할 수 있습니다.
  • 추상화 : 추상화를 적용하는 공통 인터페이스를 정의하는 추상 클래스(순수 가상 함수가 있는 클래스)를 지원합니다.
  • 클래스 계층 구조: 계층 구조(기본 → 파생 → 추가 파생)를 구축하여 실제 관계를 모델링할 수 있습니다.
  • 다형성: 가상 함수를 통한 런타임 다형성과 함수 오버로딩 및 템플릿을 통한 컴파일 타임 다형성을 완벽하게 지원합니다.

C++ 상속의 단점

  • 긴밀한 커플 링 : 하위 클래스는 상위 클래스에 종속됩니다. 기본 클래스가 변경되면 파생 클래스도 강제로 변경될 수 있습니다.
  • 유연성 감소: 때로는 구성(관계 있음)이 덜 유연한 코드로 이어지는 경우 상속이 잘못 사용됩니다.
  • 복잡성 증가: 깊은 상속 계층 구조(다중 수준 또는 하이브리드)로 인해 코드 유지 관리 및 디버그가 어려워질 수 있습니다.
  • 다이아몬드 문제: 하이브리드 또는 다중 상속의 경우 동일한 기본 클래스가 여러 번 상속되면 모호성이 발생할 수 있습니다.
  • 가상 기능의 오버헤드: 다형성(가상 함수)을 사용하는 경우 가상 테이블 조회로 인해 런타임 오버헤드가 약간 발생합니다.
퀴즈 만들기