Dead_Rabbit Skrevet 23. august 2004 Del Skrevet 23. august 2004 Heisan! Lurer på en ting angående base klasser og dynamisk binding(tror ihvertfall det er det det heter). Sett at jeg har: class Base_class { /kode her*/ } class Derived_class: public Base_class{ /*kode her*/ } Nå kan jeg lage kode slik som: Base_class* p; p = new Derived_class; Dette vet jeg er mulig men skjønner ikke hvorfor det går ann. Når jeg lager en peker av typen Base_class kan hvorfor kan den settes til å peke på et Derived_class objekt, bare fordi Derived_class arver fra Base_class? Settes det av nok plass til å holde det største objektet som har Base_class som base klasse når jeg lager et objekt av base klassen?( nå gikk det i surr ) Blir ikke det, det samme som å lage en peker av typen int og sette den til å peke på en double? (dropp den siste sammenligningen hvis den ble rotete ). På forhånd takk! PS: Skrik hvis dårlig forklart! Lenke til kommentar
A_N_K Skrevet 23. august 2004 Del Skrevet 23. august 2004 (endret) Dette er fordi at en peker kun inneholder en adresse, typen på pekeren er det kompilatoren som holder styr på. Hvis en peker til et objekt av en baseklasse egentlig peker på et objekt av en subklasse vil du bare få tilgang til baseklasse-delen, fordi at typen på pekeren indikerer at det er et baseklasse-objekt i andre enden. Dvs. at et objekt av klasse Derived_class vil bære i seg et objekt av typen Base_class, og pekeren vil peke på dette. Endret 23. august 2004 av A_N_K Lenke til kommentar
Dead_Rabbit Skrevet 23. august 2004 Forfatter Del Skrevet 23. august 2004 OK, så når man setter en baseklasse peker til å peke på en subklasse blir den delen av klassen som ikke er baseklasse bli "kuttet ut"? Lenke til kommentar
A_N_K Skrevet 23. august 2004 Del Skrevet 23. august 2004 Kompilatoren ser bare et objekt av baseklasse i andre enden av pekeren, det er ennå et fullt subklasse-objekt, men du kan bare få tilgang til baseklasse-delen med mindre du caster pekeren til en subklasse-peker. Lenke til kommentar
Dead_Rabbit Skrevet 23. august 2004 Forfatter Del Skrevet 23. august 2004 Aha, caste vet jeg ikke hva er, men sjønner det nå(det jeg spurte om ). Takker så mye for svar. Lenke til kommentar
A_N_K Skrevet 23. august 2004 Del Skrevet 23. august 2004 Caste: Derived_class* dp = static_cast<Derived_class *>(p); Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå