Mantojums C++ valodā

Mantojums C++ valodā

Mantojums ir pamatjēdziens OOP (objektorientētā programmēšana) . Tas ir mehānisms, ar kuru vienai klasei ir atļauts mantot citas klases pazīmes (laukus un metodes). Mantojums nozīmē jaunu klašu izveidi, pamatojoties uz esošajām klasēm. Klase, kas manto no citas klases, var atkārtoti izmantot šīs klases metodes un laukus.

Piemērs: Nākamajā piemērā Dzīvnieks ir pamatklase, savukārt suns kaķis un govs ir atvasinātas klases, kas paplašina dzīvnieku klasi.

dzīvnieku_klaseInheritance 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  ;   }   

Izvade
Dog barks Cat meows Cow moos  

Paskaidrojums:

  • Dzīvnieks ir pamatklase ar funkciju sound().
  • Suns Kaķis un Govs ir atvasinātas klases, katra definē savu skaņas () metodi.
  • Galvenajā() suņa kaķa un govs objekti tiek veidoti atsevišķi.
  • Kad mēs izsaucam sound() uz katra objekta, tiek palaista attiecīgā bērnu klases metode (Suns rej Kaķis ņaud Cow moos).

Sintakse

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

Kā mantošana darbojas programmā C++?

Kols (:) ar an piekļuves norādītājs tiek izmantots mantošanai C++ valodā. Tas ļauj atvasinātajai klasei (bērnu klasei) mantot bāzes klases (sākotnējās klases) datu dalībniekus (laukus) un dalībnieku funkcijas (metodes).
Kad klase manto citu klasi, tā iegūst visus pieejamos vecākklases dalībniekus, un arī pakārtotā klase var tos no jauna definēt (ignorēt) vai pievienot tiem jaunu funkcionalitāti.

Mantojuma veidi C++ valodā

mantojums

Tālāk ir norādīti dažādi mantojuma veidi, kurus atbalsta C++.

1. Viena mantošana

Viena mantojuma gadījumā apakšklase tiek atvasināta tikai no vienas superklases. Tas pārmanto viena vecāka klases īpašības un uzvedību. Dažreiz to sauc arī par vienkāršu mantojumu.

mantojumsSingle 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  ;   }   

Izvade
This is a Vehicle This Vehicle is Car  

2. Daudzkārtēja mantošana

In Daudzkārtējs mantojums vienai klasei var būt vairāk nekā viena virsklase, un tā var mantot funkcijas no visām vecākklasēm.

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  ;   }   

Izvade
This is an AmphibiousVehicle This is a WaterVehicle This is a LandVehicle  

3. Daudzlīmeņu mantošana

Daudzlīmeņu mantošana valodā C++ nozīmē, ka klase ir atvasināta no citas atvasinātas klases, kas veido mantojuma ķēdi.

Daudzlīmeņu_mantošanaMultilevel 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  ;   }   

Izvade
This is a Vehicle 4 Wheeler Vehicles This 4 Wheeler Vehicle is a Car  

4. Hierarhiskā mantošana

Hierarhiskā mantojumā vairāk nekā viena apakšklase tiek mantota no vienas bāzes klases. i., no vienas bāzes klases tiek izveidotas vairāk nekā viena atvasināta klase. Piemēram, automašīnas un autobusi ir transporta līdzekļi.

hierarhiskais_mantojumsHierarchical 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  ;   }   

Izvade
This is a Vehicle This Vehicle is Car This is a Vehicle This Vehicle is Bus  

5. Hibrīda mantošana

Kad vienā programmā ir apvienoti divi vai vairāki mantojuma veidi. Piemēram, klase var izmantot vairāku mantojumu, kā arī būt daļa no daudzlīmeņu mantojuma ķēdes.

hibrīds MantojumsHybrid 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  ;   }   

Izvade
This is a Vehicle Fare of Vehicle This Vehicle is a Bus with Fare 

Hibrīda mantošana var izraisīt dimanta problēma valodā C++. Tas notiek, ja klase manto no divām klasēm, kurām abām ir viena un tā pati bāzes klase. Rezultātā atvasinātā klase iegūst vairākas bāzes klases dalībnieku kopijas, kas rada neskaidrības par to, kuru no tiem izmantot.

Piezīme: Risinājums ir izmantot virtuālo mantojumu, lai tiktu koplietota tikai viena bāzes klases kopija.

Mantojuma priekšrocības C++ valodā

  • Koda atkārtota izmantošana : Atvasinātā klase var tieši atkārtoti izmantot savas bāzes klases datu elementus un metodes, izvairoties no koda dublēšanās.
  • Abstrakcija: Atbalsta abstraktās klases (klases ar tīrām virtuālām funkcijām), kas nosaka kopīgu interfeisu, kas nodrošina abstrakciju.
  • Klases hierarhija: Varat veidot hierarhijas (bāze → atvasināta → tālāk atvasināta), lai modelētu reālās pasaules attiecības.
  • Polimorfisms: Pilnībā atbalsta izpildlaika polimorfismu, izmantojot virtuālās funkcijas, kā arī kompilēšanas laika polimorfismu, izmantojot funkciju pārslodzi un veidnes.

Mantojuma trūkumi C++ valodā

  • Stingrs savienojums: Bērnu klase kļūst atkarīga no vecāku klases. Jebkuras izmaiņas bāzes klasē var piespiest izmaiņas atvasinātajās klasēs.
  • Samazināta elastība: Dažreiz mantojums tiek ļaunprātīgi izmantots gadījumos, kad kompozīcija (ir-attiecība) būtu labāka, tādējādi radot mazāk elastīgu kodu.
  • Paaugstināta sarežģītība: Dziļas mantojuma hierarhijas (daudzlīmeņu vai hibrīda) var apgrūtināt koda izpratni par uzturēšanu un atkļūdošanu.
  • Dimanta problēma: Hibrīda vai vairāku mantojuma gadījumā var rasties neskaidrības, ja viena un tā pati bāzes klase tiek mantota vairākas reizes.
  • Virtuālo funkciju pieskaitāmās izmaksas: Ja tiek izmantots polimorfisms (virtuālās funkcijas), virtuālās tabulas uzmeklēšanas dēļ ir neliela izpildlaika slodze.
Izveidojiet viktorīnu