26. august 2002 - 10:45Der er
10 kommentarer og 1 løsning
Nedarves virtuel funktionalitet automatisk?
Jeg vil bare gerne vide hvorvidt en funktion der er virtuel i en basisklasse også automatisk er virtuel i nedarvede klasser, selvom nøgleordet virtual ikke bruges i prototype/erklæring i de nedarvede klasser.
den er automatisk "virtual" i de nedarvede. Det er ikke nødvendigt at skrive virtual for nedarvede metoder, der er virtual i base klassen. (men er god skik at gøre det)
Vil det sige at hvis man ikke har tænkt sig at implementere den virtuelle funktion i en nedarvet klasse, men i en klasse længere nede i hierakiet, så bruger man kun virtual nøgleordet i basisklassen og den klasse i hierakiet, hvor man implementerer den.
Er det sådan du mener:
class BaseClass { protected: virtual void function(); };
class DerivedClass1 : public BaseClass { protected: void function(); };
class DerivedClass2 : public DerivedClass1 { public: virtual void function(); };
chries >> Du kan vel ikke lave prototype på den uden virtual i DerivedClass1 uden at implementere den i DerivedClass1 ! Ved virtualitet laves der altid det der kaldes sen binding, dvs. der er den "øverste" funktionsdefinition i klassehierakiet der udføres. (Med mindre der ikke er virtuel i "midten" måske ???)
Jeg forstod ikke helt hvad du mener, men du har ret i at hvis man laver en prototype, skal man også lave implementeringen (uanset om den er virtuel eller ej. Er en base funktion virtuel, læser compiler alle nedarvede også om virtuel, uanset om det står der eller ej). De eneste to måder (jeg kender) man kan undgå at lave en implementering, er at lade være med at lave/erklærer prototypen i DerivedClass1, eller lave den pure virtuel.
Opsummering: Jeg har følgende muligheder hvis jeg ikke vil implementere function i DerivedClass1:
1: Udelade den fra klassedefinitionen 2: Skrive en prototype som er virtual eller pure virtual
Er det rigtigt? (Jeg håber I har tålmodighed til det her ;-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.