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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top