La fonction de constructeur dans une classe virtuelle pure doit être “protégé” ou “public”?

L'exemple suivant est tiré du livre "à l'Intérieur de C++ object model"

class Abstract_base {
public:
    virtual ~Abstract_base () = 0;
    virtual void interface () const = 0;
    virtual const char* mumble () const 
    {
        return _mumble;
    }
protected:
    char *_mumble;
};

L'auteur dit que si je veux initialiser _mumble, le membre de données de la pure classe de base virtuelle, un "protégés constructeur" devraient être mises en œuvre.

Mais pourquoi protégé? Et pourquoi "constructeur public" n'est pas adapté pour cette classe?

Merci pour vos réponses, et il serait parfait si il y a un exemple~~ 🙂

Son pur-virtuel. La seule valide la construction d'une telle chose est par l'intermédiaire de dérivation. Dit dérivée a accès à un protégé constructeur. Rien d'autre (les amis de ne pas résister). Il n'a pas d'importance dans ce cas, mais au moins vous savez que pourquoi.
Il convient, en effet, mais personne, à l'exception de la classe dérivée peut appeler cela de toute façon.

OriginalL'auteur Wizmann | 2014-06-04