Oggi ho avuto una rivelazione.
Uso il Visualstudio 2010, con le MFC, di cui ho derivato una classe, ereditandone le proprietà con accesso protected:
class CNetMessageQueue: protected CArray
{
[...]
}
Questo perché alcuni metodi della CArray causerebbero una perdita di consistenza dei dati aggiunti a CNetMessage.
Ho però scoperto che se tento di allocare un oggetto della suddetta classe dinamicamente:
CNetMessageQueue *queue = new CNetMessageQueue(10);
Il compilatore mi dà l'errore:
CObject::operator new' non accessibile. 'CNetMessageQueue' utilizza 'protected' per ereditare da CArray.
Ne deduco che la classe CObject (da cui CArray è derivata) ha ridefinito l'operatore new, che viene quindi ereditato dalla mia classe, ma con accesso protected, quindi non richiamabile al di fuori dell'oggetto!
Pare che invece non ci sia nessun problema con l'allocazione statica.
La domanda che mi pongo è: c'è un'imprecisione logica da qualche parte?
Ha mai senso, a questo punto, usare la derivazione con accesso protected?
Sono io che sto usando la oop nel modo non ottimale, o sono le MFC ad essere "poco pulite" su questo aspetto?
Sono curioso di sentire i vostri pareri.
--
Mickey