Care este diferența dintre turnarea în sus și turnarea în jos în programarea orientată obiect C ++?


Răspunsul 1:

1.Up- este implicit în C ++ și este utilizat foarte mult atunci când aveți de-a face cu expedierea virtuală.

Cu alte cuvinte, aveți un pointer către Base de la care puteți accesa interfața comună a unei întregi ierarhii de clase, iar selecția se poate face în timp de rulare.

Aceasta presupune că funcțiile dvs. de interfață sunt marcate virtual. Exemplu:

Baza * pBase;
cin >> x;
if (x == 0) // acest lucru se face la runtime, așa cum nu știm x la compilare
    pBase = nou Derivat1;
altfel
    pBase = nou Derivat2;

pBase-> trage (); // draw este o funcție de membru virtual

Este extrem de util în aceste situații în care expedierea se face la runtime sau la timpul de execuție Polimorfism.

Simplu spus, actualizarea permite unuia să trateze o clasă derivată ca o clasă de bază (prin intermediul interfeței sale comune).

2. Turnarea în casă este mai puțin utilă, în general este un semn al unui design necorespunzător, deoarece rareori trebuie să transformăm un obiect de bază în unul derivat. Se poate face prin dinamica_cast.

Baza * pBase = nou derivat; // OK, tipul dinamic de pBase este derivat
Derivat * pDerived = dinamic_cast  (pBase);
if (pDerived) // testează întotdeauna
{
    // succes
}
altfel
{
    // nu reușesc să renunțe
}