J'ai trouvé ce code hereclasse qui ne peut être dérivé
class Usable;
class Usable_lock {
friend class Usable;
private:
Usable_lock() {}
Usable_lock(const Usable_lock&) {}
};
class Usable : public virtual Usable_lock {
// ...
public:
Usable();
Usable(char*);
// ...
};
Usable a;
class DD : public Usable { };
DD dd; // error: DD::DD() cannot access
// Usable_lock::Usable_lock(): private member
Quelqu'un pourrait me expliquer ce code?
EDIT: Une autre question que j'ai est ce qui est une dérivation virtuelle et quand est-il nécessaire?
Notez que cette classe ne fait pas ce qu'elle dit sur l'étain - elle n'empêche pas la dérivation. Si tel était le cas, un message d'erreur s'afficherait au point où la classe est réellement dérivée. –
Ceci est un article sur l'héritage virtuel: http://en.wikipedia.org/wiki/Virtual_inheritance. Pourquoi l'héritage virtuel est utilisé ici? Pour éviter les problèmes d'héritage multiples, lorsque la classe Usable est dérivée d'une autre classe, à l'exception de Usable_lock. –
Essayez d'éditer pour utiliser ce lien à la place: http://www2.research.att.com/~bs/bs_faq2.html#no-derivation "Il repose sur le fait que la classe la plus dérivée dans une hiérarchie doit construire un base virtuelle. " La classe DD le fait. –