Šajā apmācībā mēs uzzināsim par funkciju ignorēšanu C ++, izmantojot piemērus.
Kā mēs zinām, mantošana ir OOP iezīme, kas ļauj mums izveidot atvasinātas klases no bāzes klases. Atvasinātās klases pārmanto bāzes klases pazīmes.
Pieņemsim, ka tā pati funkcija ir definēta gan atvasinātajā, gan balstītajā klasē. Ja mēs šo funkciju izsaucam, izmantojot atvasinātās klases objektu, tiek izpildīta atvasinātās klases funkcija.
To sauc par funkcijas ignorēšanu C ++. Funkcija atvasinātajā klasē ignorē funkciju bāzes klasē.
1. piemērs: Funkcijas C ++ ignorēšana
// C++ program to demonstrate function overriding #include using namespace std; class Base ( public: void print() ( cout << "Base Function" << endl; ) ); class Derived : public Base ( public: void print() ( cout << "Derived Function" << endl; ) ); int main() ( Derived derived1; derived1.print(); return 0; )
Rezultāts
Atvasinātā funkcija
Lūk, tā pati funkcija print()
ir definēta gan Base
un Derived
klasēs.
Tātad, kad mēs izsaucam print()
no Derived
atvasinātā objekta1, print()
no Derived
tiek izpildīts, ignorējot funkciju iekš Base
.
![](https://cdn.wiki-base.com/1143898/c_function_overriding.png.webp)
Piekļūstiet ignorētai funkcijai C ++
Lai piekļūtu ignorētajai bāzes klases funkcijai, mēs izmantojam darbības jomas izšķirtspējas operatoru ::
.
Mēs varam piekļūt arī ignorētajai funkcijai, izmantojot bāzes klases rādītāju, lai norādītu uz atvasinātās klases objektu, un pēc tam izsaucot funkciju no šī rādītāja.
2. piemērs: C ++ piekļuves funkcijas ignorēšana bāzes klasei
// C++ program to access overridden function // in main() using the scope resolution operator :: #include using namespace std; class Base ( public: void print() ( cout << "Base Function" << endl; ) ); class Derived : public Base ( public: void print() ( cout << "Derived Function" << endl; ) ); int main() ( Derived derived1, derived2; derived1.print(); // access print() function of the Base class derived2.Base::print(); return 0; )
Rezultāts
Atvasinātā funkcija Bāzes funkcija
Lūk, šis paziņojums
derived2.Base::print();
piekļūst print()
bāzes klases funkcijai.
![](https://cdn.wiki-base.com/1143898/c_function_overriding_2.png.webp)
3. piemērs: C ++ Zvana ignorētā funkcija no atvasinātās klases
// C++ program to call the overridden function // from a member function of the derived class #include using namespace std; class Base ( public: void print() ( cout << "Base Function" << endl; ) ); class Derived : public Base ( public: void print() ( cout << "Derived Function" << endl; // call overridden function Base::print(); ) ); int main() ( Derived derived1; derived1.print(); return 0; )
Rezultāts
Atvasinātā funkcija Bāzes funkcija
Šajā programmā mēs esam izsaukuši ignorēto funkciju pašā Derived
klasē.
class Derived : public Base ( public: void print() ( cout << "Derived Function" << endl; Base::print(); ) );
Ievērojiet kodu Base::print();
, kas izsauc ignorēto funkciju Derived
klases iekšienē .
![](https://cdn.wiki-base.com/1143898/c_function_overriding_3.png.webp)
4. piemērs: C ++ zvana ignorēšanas funkcija, izmantojot rādītāju
// C++ program to access overridden function using pointer // of Base type that points to an object of Derived class #include using namespace std; class Base ( public: void print() ( cout << "Base Function" << endl; ) ); class Derived : public Base ( public: void print() ( cout << "Derived Function"
Output
Base Function
In this program, we have created a pointer of
Base
type named ptr. This pointer points to the Derived
object derived1.
// pointer of Base type that points to derived1 Base* ptr = &derived1;
When we call the
print()
function using ptr, it calls the overridden function from Base
.
// call function of Base class using ptr ptr->print();
This is because even though ptr points to a
Derived
object, it is actually of Base
type. So, it calls the member function of Base
.
In order to override the
Base
function instead of accessing it, we need to use virtual functions in the Base
class.