Introduktion till åsidosättande i C ++

Överträning i C ++ är ett av sätten att uppnå polymorfism av körtid, där vi modifierar beteendet på samma metod. I allmänhet ärver barnklassen medlemsfunktionerna och datamedlemmarna från basklassen. Men när vårt behov är att åsidosätta funktionaliteten i barnklassen, måste vi använda funktionen åsidosättande. Överskridande ger ett privilegium för metoderna att ha samma namn i både basklass och dess härledda klass. Det gör att vi kan ändra funktionsbeteendet som finns i basklassen, i dess härledda klasser enligt vårt behov.

Hur fungerar överkörning i C ++?

Innan vi förstår övervägande, låt oss först förstå polymorfism. Den bokstavliga betydelsen av polymorfism är många former dvs att ha flera former av en viss sak. I ett objektorienterat programmeringsspråk är detta en av de användbara funktionerna. I arv uppnås polymorfism, genom att funktionen eller metoden åsidosätts, när både bas- och härledda klasser har samma deklaration av medlemsfunktion men deras definition kommer att vara annorlunda.

För att göra detta måste vi ärva från en klass till den härledda klassen först. Då borde vi tillhandahålla olika definitioner efter behov, för någon av basklassens metoder igen i den härledda klassen. Först då sägs den funktionen åsidosättas, och denna steg-för-steg-process kallas Funktionsöverskridande.

Låt oss säga ta ett scenario där vår applikation har kravet på att ändra beteendet för basklassmetoden i en härledd klass, då bör vi använda funktionen att åsidosätta . För att åsidosätta en funktion i den härledda klassen måste vi ha samma signatur i underklass. Funktionsnamn bör vara samma i både baser och härledda klasser. Här betyder signatur användning av samma datatyp och sekvens av parametrar som ska skickas i funktionen. Om det inte finns några behov av parametrar behöver vi inte använda någon parameter i basfunktionen såväl som barnfunktionen. Nedan har vi några punkter som vi måste ha i åtanke innan vi använder övervägande.

  • I C ++ -programmering är överskridande ett exempel på körtidspolymorfism eller dynamisk polymorfism.
  • Överskridande är endast möjligt i de metoder som finns i härledda klasser eftersom en metod åsidosätts i den härledda klassen från basklassen.
  • För att uppnå övervägande bör funktionerna som finns i bas- och härledda klasser ha samma namn, samma returtyp och samma parametrar.

Metoden som åsidosätts av åsidosättningsdeklarationen kallas den åsidosatta basmetoden. Basklassen innehåller den här metoden. Ny implementering som kallas, åsidosättningsmetod ärvs från denna basklass. När vi skapar ett objekt för den härledda klassen och kallar medlemsfunktionen som finns i både bas- och härledda klasser, ignoreras medlemsfunktionen och basfunktionen kommer att åberopas.

Nedan följer kraven för metodöverskridande:

  • Det första och viktigaste är att ärft ska vara där från bas till härledd klass eftersom funktionsöverskridande inte kan göras inom samma klass. För att uppnå detta behöver vi en basklass och en härledd klass.
  • Den omdefinierade funktionen bör ha exakt samma deklaration i både bas- och härledda klasser. Vad betyder det? Detta innebär att funktionerna ska ha samma namn, samma signatur och samma parameterlista.

Exempel på åsidosättande

Koda

class Animal
(
public:
void Message ( )
(
cout << "Hello there!! I am Animal";
)
);
class Dog: public Animal
(
public:
void Message ( )
(
cout << "I am Dog!!";
)
)

I exemplet ovan åsidosätts funktionen Meddelande () i den härledda klassen.

Exempel med steg

1. Låt oss ta en titt på exemplet med hjälp av huvudfunktionen () för att förstå överordnad bättre.

2. Skapa en basklass med valfritt namn. Här använder jag Animal. Skriv en metod för att visa något meddelande som ska visas. Detta kommer att vara vår åsidosatta metod som vi kommer att åsidosätta i den ärvda klassen. Inne i metoden skriver du något meddelande som ska skrivas ut.

class Animal
(
public void Message( )
(
cout << "Hello there!! I am Animal";
)
)

3. Skapa nu ytterligare en hund. Den här gången kommer vi att ärva den från basklassen som vi skapade tidigare, djur. För att ärva använder vi symbolen ':'.

class Dog: public Animal

4. Här förklarar vi samma meddelande () -funktion för olika implementering och skriver något meddelande. Se till att metodnamnet och signaturen i den härledda klassen matchar metodnamnet och signaturen i basklassen.

public void Message ( )
(
cout << "Hey!! I am Dog";
)

5. Vi behöver ytterligare en klass för att utföra funktionaliteten för att kontrollera det övervägande. Skapa en klass med valfritt namn. Inuti det skriver du huvudfunktionen.

class ExecutionClass
(
int Main( )
(
)
)

6. Skapa ett objekt i förälderklassen och trigga funktionen med klassens objekt. Detta påkallar meddelandemetoden som finns i djurklassen.

Animal animalObject;
animalObject.Message( );

7. Skapa nu objektet för den härledda klassen och ring meddelandemetoden. Detta påkallar meddelandemetoden i hundklassen.

Dog dogObject;
dogObject.Message( );

8. Vilken utgång kommer från den här koden? Kan du gissa det? Detta är som visas nedan.

Produktion:

9. I exemplet ovan kallar vi funktionen med samma namn och signatur och använder ett objekt skapat för härledd och basklass separat. I båda fallen kommer olika versioner av funktionen att anropas för bas och härledd klass.

Slutsats

I den här artikeln förstod vi metoden åsidosättande i C ++, behovet av att metoden åsidosätter, verkliga exempel på den övervägande principen, sättet att uppnå det och exemplet med att åsidosätta med koden. Vi kan dra slutsatsen att åsidosättande är en av de användbara funktionerna i polymorfism i C ++ där vi kan ändra beteendet för basklassmetoden i den härledda klassen.

Rekommenderade artiklar

Detta är en guide till Överträning i C ++. Här diskuterar vi hur Overriding i C ++ fungerar, ett enkelt exempel med olika steg. Du kan också gå igenom våra andra relaterade artiklar för att lära dig mer-

  1. Matriser i C ++
  2. Introduktion till C ++
  3. C ++ -kommandon
  4. Kopiera konstruktör i C ++
  5. Handbok för överträffande i OOP
  6. Övergripande i Java

Kategori: