1 / 5

Konvertering supertyp subtyp

Konvertering supertyp subtyp. Konvertering från supertyp till subtyp görs med dynamic_cast För att komma åt medlem som bara finns i subtypen. Är det dålig design att ha sådana medlemmar?. dynamic_cast med pekare. Behövs t.ex. för att anropa medlemsfunktion som inte finns i “överklassen”:

dutch
Télécharger la présentation

Konvertering supertyp subtyp

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Konvertering supertyp subtyp • Konvertering från supertyp till subtyp görs med dynamic_cast • För att komma åt medlem som bara finns i subtypen. • Är det dålig design att ha sådana medlemmar? CD5250 OOP med C++ Mats Medin MDH/IDT

  2. dynamic_cast med pekare Behövs t.ex. för att anropa medlemsfunktion som inte finns i “överklassen”: Drawable *mittRitobjekt = hamtaNastaObj; Pil *pp = dynamic_cast<Pil*>(mittRitobjekt); if (pp) // Det var en pil, konvertering lyckades! pp->byt_riktning(); Objektets dynamiska typ är känd men för medlemsåtkomst används den statiska typen. :-( CD5250 OOP med C++ Mats Medin MDH/IDT

  3. dynamic_cast med referens Exempel: anropa subtypens medlemsfunktioner på ett objekt utpekat av “supertypreferens”: Drawable &mittRitobjekt = hamtaNastaObj; try { Pil &pp = dynamic_cast<Pil&>(mittRitobjekt); pp->byt_riktning(); } catch (std::bad_cast) { /* Det var inte en pil */} CD5250 OOP med C++ Mats Medin MDH/IDT

  4. typeid och type_info För avlusning, anses fult att använda i färdiga program #include <typeinfo> type_info ti; class Minklass : public Overklass {…} Minklass mittobj; Overklass *minpekare = & mittobj; ti = typeid(*myptr); cout << ti.name() << endl; // Vad händer? CD5250 OOP med C++ Mats Medin MDH/IDT

  5. typeid och type_info forts cout << ti << endl; // Vad händer? klass med virtuella funktioner: • det av myptr utpekade objektets dynamiska typ skrivs ut, dvs Minklass klass utan virtuella funktioner: • den statiska typen hos uttrycket (*myptr) skrivs ut, dvs Basklass typeid funkar på alla slags typer och uttryck: typeinfo(myint), typeinfo(a || b), typeinfo(3.1415) CD5250 OOP med C++ Mats Medin MDH/IDT

More Related