Dedovanje v C++

Dedovanje v C++

Dedovanje je temeljni koncept v OOP (objektno usmerjeno programiranje) . Je mehanizem, s katerim lahko en razred podeduje lastnosti (polja in metode) drugega razreda. Dedovanje pomeni ustvarjanje novih razredov na podlagi obstoječih. Razred, ki deduje od drugega razreda, lahko znova uporabi metode in polja tega razreda.

primer: V naslednjem primeru je Animal osnovni razred, Dog Cat in Cow pa sta izpeljana razreda, ki razširjata razred Animal.

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

Izhod
Dog barks Cat meows Cow moos  

Pojasnilo:

  • Animal je osnovni razred s funkcijo sound().
  • Dog Cat in Cow sta izpeljana razreda, ki definirata vsak svojo metodo sound().
  • V main() se objekti Dog Cat in Cow ustvarijo ločeno.
  • Ko pokličemo sound() za vsak objekt, se izvaja ustrezna metoda podrejenega razreda (pes laja, mačka mijavka, krava muka).

Sintaksa

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

Kako deluje dedovanje v C++?

Dvopičje (:) z an specifikator dostopa se uporablja za dedovanje v C++. Izpeljanemu razredu (podrejenemu razredu) omogoča podedovanje podatkovnih članov (polj) in članskih funkcij (metod) osnovnega razreda (nadrejenega razreda).
Ko razred podeduje drug razred, dobi vse dostopne člane nadrejenega razreda, podrejeni razred pa jih lahko tudi na novo definira (preglasi) ali jim doda novo funkcionalnost.

Vrste dedovanja v C++

dedovanje

Spodaj so različne vrste dedovanja, ki jih podpira C++.

1. Enojno dedovanje

Pri enojnem dedovanju je podrazred izpeljan samo iz enega nadrazreda. Podeduje lastnosti in obnašanje enostarševskega razreda. Včasih je znano tudi kot preprosto dedovanje.

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

Izhod
This is a Vehicle This Vehicle is Car  

2. Večkratno dedovanje

noter Večkratno dedovanje en razred ima lahko več kot en nadrazred in podeduje lastnosti vseh nadrejenih razredov.

Večkratno_dedovanjeMultiple 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  ;   }   

Izhod
This is an AmphibiousVehicle This is a WaterVehicle This is a LandVehicle  

3. Večnivojsko dedovanje

Večnivojsko dedovanje v C++ pomeni, da je razred izpeljan iz drugega izpeljanega razreda, ki tvori verigo dedovanja.

Večnivojsko_dedovanjeMultilevel 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  ;   }   

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

4. Hierarhično dedovanje

Pri hierarhičnem dedovanju je več kot en podrazred podedovan iz enega osnovnega razreda. tj. več kot en izpeljani razred je ustvarjen iz enega osnovnega razreda. Na primer, avtomobili in avtobusi so vozila.

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

Izhod
This is a Vehicle This Vehicle is Car This is a Vehicle This Vehicle is Bus  

5. Hibridno dedovanje

Ko sta dve ali več vrst dedovanja združena v enem programu. Razred lahko na primer uporablja večkratno dedovanje in je tudi del večnivojske verige dedovanja.

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

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

Hibridno dedovanje lahko vodi do diamantni problem v C++. To se zgodi, ko razred deduje od dveh razredov, ki si delita isti osnovni razred. Posledično dobi izpeljani razred več kopij članov osnovnega razreda, kar ustvarja dvoumnost glede tega, katerega uporabiti.

Opomba: Rešitev je uporaba navideznega dedovanja, tako da je v skupni rabi samo ena kopija osnovnega razreda.

Prednosti dedovanja v C++

  • Ponovna uporabnost kode : Izpeljani razred lahko neposredno ponovno uporabi podatkovne člane in metode svojega osnovnega razreda, pri čemer se izogne ​​podvajanju kode.
  • Abstrakcija: Podpira abstraktne razrede (razrede s čisto virtualnimi funkcijami), ki definirajo skupni vmesnik, ki uveljavlja abstrakcijo.
  • Hierarhija razreda: Gradite lahko hierarhije (osnovno → izpeljano → nadaljnje izpeljano) za modeliranje odnosov v resničnem svetu.
  • polimorfizem: Popolnoma podpira polimorfizem med izvajanjem prek virtualnih funkcij in tudi polimorfizem med prevajanjem prek preobremenitve funkcij in predlog.

Slabosti dedovanja v C++

  • Tesna povezava: Podrejeni razred postane odvisen od nadrejenega razreda. Vsaka sprememba v osnovnem razredu lahko povzroči spremembe v izpeljanih razredih.
  • Zmanjšana prožnost: Včasih je dedovanje zlorabljeno, kjer bi bila sestava (ima-razmerje) boljša, kar vodi do manj prilagodljive kode.
  • Povečana kompleksnost: Globoke hierarhije dedovanja (večnivojske ali hibridne) lahko povzročijo, da je koda težko razumljiva pri vzdrževanju in odpravljanju napak.
  • Problem z diamanti: Pri hibridnem ali večkratnem dedovanju lahko pride do dvoumnosti, če je isti osnovni razred podedovan večkrat.
  • Stroški virtualnih funkcij: Če se uporablja polimorfizem (navidezne funkcije), je zaradi iskanja navidezne tabele majhen čas izvajanja.
Ustvari kviz