Přepsání funkce C ++

C Function Overriding



V tomto článku se budeme zabývat funkcí přepsanou v programovacím jazyce C ++. C ++ podporuje runtime polymorfismus.

Při přepsání funkce podřízená třída předefinuje funkci, která je již definována v její nadřazené třídě.







Umožňuje programátorovi poskytovat odvozené funkce specifické pro třídu (přestože je definován v základní třídě).



Nyní uvidíme několik příkladů a porozumíme konceptu převažujícímu v C ++.



Příklad-1

V níže uvedeném příkladu kódu jsem definoval dvě třídy - základní třídu a odvozenou třídu. Základní třída má členskou funkci, tj. Disp (). Třída Derived_Class je zděděna ze třídy Base_Class. Funkce disp () je přítomna v Base_Class a poté předefinována v Derived_Class.





Ve funkci main () je vytvořen objekt Derived_Class, tj. D. Potom na objektu odvozené třídy zavoláme funkci disp (), takže bude vyvolána funkce v odvozené třídě. Verze základní třídy je zde ignorována. Níže můžete vidět funkci výstupu jako - disp () v odvozené třídě.

#zahrnout

pomocí oboru názvů std;

// základní třída
třída Base_Class
{
veřejnost:
prázdnévyužít()
{
náklady<< 'funkce disp () v základní třídě.' <<endl;
}

};

// odvozená třída
třída Derived_Class:public Base_Class
{
veřejnost:
prázdnévyužít()
{
náklady<< 'funkce disp () v odvozené třídě' <<endl;
}
};

inthlavní()
{
Derived_Class d;
d.využít(); // funkce disp () na odvozeném objektu třídy
vrátit se 0;
}



Příklad-2

V tomto příkladu uvidíme, jak záměrně volat verzi funkce základní třídy prostřednictvím odvozeného objektu třídy. V definici funkce odvozené třídy používáme operátor rozlišení oboru [::] k volání verze funkce základní třídy.

#zahrnout

pomocí oboru názvů std;

třída Base_Class
{
veřejnost:
prázdnévyužít()
{
náklady<< 'funkce disp () v základní třídě.' <<endl;
}

};

třída Derived_Class:public Base_Class
{
veřejnost:
prázdnévyužít()
{
Base_Class::využít(); // Zavolejte verzi disp () základní třídy
}
};

inthlavní()
{
Derived_Class d;
d.využít();
vrátit se 0;
}

Příklad-3

Toto je další příklad přepsání funkce. V tomto příkladu jsme vytvořili nadřazenou třídu - Zvíře a dvě odvozené třídy - Kachna a Pes. Základní třída, tj. Třída Animal, má členskou funkci sound ().

V odvozené třídě/podřízené třídě, tj. U psa, jsme předefinovali stejnou funkci, tj. Zvuk (), abychom přepsali její definici základní třídy. Podobně jsme v jiné odvozené třídě, tj. Duck, předefinovali stejnou funkci, tj. Sound ().

Ve funkci main () jsme vytvořili psí předmět Pes a kachna kachna. Takže teď, když pro psa a kachnu zavoláme funkci sound (), zavolá odvozená verze verze funkce sound (). Výstup programu můžete vidět níže. Pomocí přepsané funkce tedy můžeme vyvolat odvozenou funkci specifickou pro třídu.

#zahrnout

pomocí oboru názvů std;

třída Zvíře
{
veřejnost:
prázdnézvuk()
{
náklady<< 'Zvuk zvířat!' <<endl;
}

};

// Odvozená třída - třída psa
třídní pes:veřejné Zvíře
{
veřejnost:
prázdnézvuk()
{
náklady<< 'Zvuk psa - štěkot.' <<endl;
}
};

// Odvozená třída - Kachní třída
třída Kachna:veřejné Zvíře
{
veřejnost:
prázdnézvuk()
{
náklady<< 'Kachní zvuk - šarlatán.' <<endl;
}
};


inthlavní()
{
Pes pes;
Kachní kachna;

Pes.zvuk(); // zvuk () psa
kachna.zvuk(); // zvuk () kachny

vrátit se 0;
}

Závěr

V tomto článku jsem vysvětlil přepsání funkce C ++ . Jazyk C ++ podporuje runtime polymorfismus. Přepsání funkce pomáhá dosáhnout polymorfismu běhu v C ++. Tento článek se zabýval konceptem přepsání funkce a jak dosáhnout runtime polymorfismu pomocí přepsání funkce.