C ++ funkciju ignorēšana

C Function Overriding



Šajā rakstā mēs apskatīsim funkciju ignorēšanu programmēšanas valodā C ++. C ++ atbalsta izpildlaika polimorfismu.

Funkciju ignorēšanā pakārtotā klase no jauna definē funkciju, kas jau ir definēta tās vecāku klasē.







Tas ļauj programmētājam nodrošināt atvasinātas klases funkcionalitāti (pat ja tā ir definēta pamatklasē).



Tagad mēs redzēsim dažus piemērus un sapratīsim funkciju virsrakstīšanas jēdzienu C ++.



1. piemērs

Zemāk esošajā piemēra kodā esmu definējis divas klases - bāzes klasi un atvasinātu klasi. Bāzes klasei ir dalībnieka funkcija, t.i., disp (). Derived_Class tiek mantots no Base_Class. Funkcija disp () atrodas Base_Class un pēc tam tiek atkārtoti definēta Derived_Class.





Galvenajā () funkcijā tiek izveidots Derived_Class objekts, t.i., d. Pēc tam mēs izsaucam funkciju disp () atvasinātajā klases objektā, tāpēc tiks izsaukta funkcija atvasinātajā klasē. Bāzes klases versija šeit tiek ignorēta. Zemāk jūs varat redzēt izvades funkciju kā - disp () atvasinātajā klasē.

#iekļaut

izmantojot nosaukumvietas std;

// bāzes klase
klase Base_Class
{
publiski:
spēkā neesošsizmantot()
{
izmaksas<< 'disp () funkcija pamata klasē.' <<endl;
}

};

// atvasinātā klase
klase Derived_Class:publiska Base_Class
{
publiski:
spēkā neesošsizmantot()
{
izmaksas<< 'disp () funkcija atvasinātajā klasē' <<endl;
}
};

intgalvenais()
{
Derived_Class d;
d.izmantot(); // disp () funkcija atvasinātā klases objektā
atgriezties 0;
}



2. piemērs

Šajā piemērā mēs redzēsim, kā apzināti izsaukt funkcijas bāzes klases versiju, izmantojot atvasināto klases objektu. Atvasinātajā klases funkciju definīcijā mēs izmantojam darbības jomas izšķirtspējas operatoru [::], lai izsauktu funkcijas pamatklases versiju.

#iekļaut

izmantojot nosaukumvietas std;

klase Base_Class
{
publiski:
spēkā neesošsizmantot()
{
izmaksas<< 'disp () funkcija pamata klasē.' <<endl;
}

};

klase Derived_Class:publiska Base_Class
{
publiski:
spēkā neesošsizmantot()
{
Base_Class::izmantot(); // Izsauciet disp () bāzes klases versiju
}
};

intgalvenais()
{
Derived_Class d;
d.izmantot();
atgriezties 0;
}

3. piemērs

Šis ir vēl viens funkciju ignorēšanas piemērs. Šajā piemērā mēs esam izveidojuši vecāku klasi - Dzīvnieki un divas atvasinātas klases - Pīle un Suns. Bāzes klasei, ti, dzīvnieku klasei, ir dalībnieku funkcijas skaņa ().

Atvasinātajā klasē/bērnu klasē, t.i., suns, mēs esam atkārtoti definējuši to pašu funkciju, ti, skaņu (), lai ignorētu tās pamatklases definīciju. Līdzīgi arī citā atvasinātajā klasē, t.i., Duck, mēs esam no jauna definējuši to pašu funkciju, t.i., sound ().

Galvenajā () funkcijā mēs esam izveidojuši suņa objektu Dog and Duck of Duck. Tātad, tagad, kad saucam skaņas () funkciju suņiem un pīlēm, tiks izsaukta skaņas () funkcijas atvasinātā klases versija. Jūs varat redzēt programmas izlaidi, kā parādīts zemāk. Tātad, izmantojot funkciju ignorēšanu, mēs varam izsaukt atvasināto klases specifisko funkciju.

#iekļaut

izmantojot nosaukumvietas std;

klases dzīvnieks
{
publiski:
spēkā neesošsskaņa()
{
izmaksas<< 'Dzīvnieku skaņa!' <<endl;
}

};

// Atvasinātā klase - Suņu klase
klases Suns:publiskais dzīvnieks
{
publiski:
spēkā neesošsskaņa()
{
izmaksas<< 'Suņa skaņa - miza.' <<endl;
}
};

// Atvasinātā klase - Pīļu klase
klases Pīle:publiskais dzīvnieks
{
publiski:
spēkā neesošsskaņa()
{
izmaksas<< 'Pīles skaņa - čīkstēt.' <<endl;
}
};


intgalvenais()
{
Suņu suns;
Pīle pīle;

suns.skaņa(); // suņa skaņa ()
pīle.skaņa(); // skaņa () no pīles

atgriezties 0;
}

Secinājums

Šajā rakstā es izskaidroju funkciju ignorēšanu C ++ . C ++ valoda atbalsta izpildlaika polimorfismu. Funkciju ignorēšana palīdz sasniegt izpildes laika polimorfismu C ++. Šajā rakstā tika aplūkots funkciju ignorēšanas jēdziens un kā sasniegt izpildlaika polimorfismu, izmantojot funkciju ignorēšanu.