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ě.
#zahrnoutpomocí 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.
#zahrnoutpomocí 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.
#zahrnoutpomocí 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.