90 likes | 204 Views
Arv repetition. Arv = Är relation Tillgänglighet public, protected och private. Överklass ös Direkt härledd underklass dhu: Class dhu : public ös{} Indirekt härledd underklass idhu Class idhu: public dhu{} Här är ös en indirekt basklass till klassen idhu. Arv konstigheter.
E N D
Arv repetition • Arv = Är relation • Tillgänglighet public, protected och private. • Överklass ös • Direkt härledd underklass dhu: • Class dhu : public ös{} • Indirekt härledd underklass idhu • Class idhu: public dhu{} • Här är ös en indirekt basklass till klassen idhu
Arv konstigheter • Konstruktorer,destruktorer, vänfunktioner och tilldelningsoperatorn ärvs inte. • Medlemmar med samma namn göms av underklassen även om de inte har samma antal eller typ på parametrar. • Man kan inte öka tillgänglighetsnivå för en datamedlem via arv, man kan bara behålla eller minska tillgänglighetsnivån.
Konstruktor vid arv • I konstruktorn för underklassen kan man anropa konstruktorn för överklassen • Konstruktor underklass():konstruktor överklass() {} • Finns inte anropet anropas default konstruktorn i stället. • Basklassens konstruktor anropas • Den egna klassens datamedlemmar inititeras. • Satserna i underklassens konstruktor, dvs innanför {} teknen anropas .
Destruktor När ett objekt tas bort sker följande • Satserna i den aktuella klassens destruktor exekveras • Destruktorerna för den aktuella klassens datamedlemmar anropas • Destruktorn för ev. överklass anropas
Polymorfism (mångformighet) • Överlagring (Arv) och generiska programenheter (Klasstemplates) ger statisk bindning • Dynamisk bindning med arv och virtual. • Säger man bara polymorfism brukar man mena dynamisk bindning. • Alla medlemsfunktioner utom konstruktörer, new och delete kan vara virituella.
Virituell destruktor • Används arv så ska en virituell destruktor användas i alla basklasser.
Undvik slicing Person owner(”kalle”); Bil b(owner); Fordon f = b; // SLICING!!! Fordon *f2 = &b; // OK
Abstrakt klass • En abstrakt klass kan inte instansieras och innehåller minst en ren virituell funktion enligt nedan. • Virtual resultattyp funk(parametrar)=0; • Är alla funktioner i klassen rent virituella blir klassen en rent abstrakt klass. • Användningsområdet för en rent abstrakta klass kan vara att beskriva interface (metoder som syns utåt).
Multipelt arv • Class D:public B1, public B2, public B3{} • Varje basklass ingår i sin helhet i subklasserna. • Lös namkonflikter med :: operatorn • En virituell basklass v ingår exakt en gång i ett objekt. • Class C: public virtual V{};