Pensavo in teoria che la risposta a questa domanda fosse sì.È possibile rendere una funzione derivata una classe derivata dichiarando privato costruttore/operatore di copia nella classe base?
Tuttavia, in pratica, il mio compilatore (VS2010) non sembra lamentarsi nella seguente situazione: Ho una classe di base astratta che fornisce un'interfaccia comune (senza avere membri di dati) e vari sottotitoli e sububercassi derivati da esso.
class Base
{
public:
Base() {}
virtual ~Base() {}
virtual void interfaceFunction1() = 0;
virtual void interfaceFunction2() = 0;
private:
Base(const Base&); // all derived classes should be uncopyable
Base& operator=(const Base&);
// no data members
};
mio compilatore trovato senza problemi per implementare anche costruttori di copia completa in sub o subsubclasses.
Come posso essere sicuro che tutte le classi derivate da Base siano non copiabili?
edit: Se ho capito bene, questo è esattamente quello che Scott Meyers ha spiegato al punto 6 del Effective C++ (3a edizione, 2005), con la sua idea della classe Uncopyable
(solo esteso qui per una classe di interfaccia completa). Qual è la differenza che fa funzionare la sua idea? (So che eredita privatamente, ma questo non dovrebbe rappresentare un problema)
Può essere aggiunto un membro fittizio di dati. –
Hai testato altri compilatori? Anche presentare una classe derivata sarebbe bello;) (in realtà più qualcosa di simile a un esempio compilabile.) – luk32
Qual è l'uso di una funzione pura non contrassegnata come virtuale? –