Ridefinizione metodi virtuali puri in C ++
-
03-10-2019 - |
Domanda
Hai a metodi di dichiarazione di sostituire una funzione virtuale pura in una classe di base? Se sì, perché? Perché la classe base ha dichiarato i metodi come pure virtuale, e quindi deve esistere nella classe derivata, quindi è non dovrebbe essere necessario ridichiarare loro nella classe derivata prima di poter implementare loro al di fuori della definizione della classe. Non sei d'accordo?
Soluzione
Sì avete.
La ragione di questo è quello di lasciare che il compilatore a sapere che il metodo virtuale è in corso di attuazione da parte della classe derivata dal momento che una classe derivata può anche essere astratto e hanno metodi virtuali. Poiché unità di compilazione vengono compilati separatamente, il compilatore altrimenti non sapere se un metodo virtuale è implementato da una classe derivata nella compilazione un'altra unità di compilazione che utilizza il calss derivato e quindi se si tratta di una classe astratta o meno.
Altri suggerimenti
Non c'è bisogno di ignorare la dichiarazione della classe di base. Se non lo fai, la classe derivata è semplicemente astratta pure.
Quindi, la dichiarazione della classe derivata ha uno scopo preciso, e si ha bisogno.
La definizione di classe come dice il nome è la dichiarazione della classe. Se non si sta dichiarando funzione derivata (da quello virtuale pura) compilatore non lo troverà.
È necessario derivate le funzioni virtuali puri solo se la classe verrà creata un'istanza. Si può avere la funzione virtuale pura classe A, classe B che eredita dalla classe A, ma non hanno funzioni derivate e poi una di classe C che eredita dalla classe B con reimplementazione di funzione derivata. In tal caso, unica classe C può essere un'istanza, quindi perché compilatore dovrebbe aggiungere dichiarazione di classe derivata in classe B? È per questo che si deve indicare al compilatore quale classe è reimplementare funzioni virtuali pure.