Question

Si une classe va toujours être héritée, est-il logique de faire le protected constructeur?

class Base
{
protected:
    Base();
};

class Child : protected Base
{
public:
    Child() : Base();
};

Merci.

Était-ce utile?

La solution

Cela n'a de sens que si vous ne voulez que les clients de créer des instances de Base plutôt vous avez l'intention d'être la classe de base de certaines classes [dérivés], et / ou ont l'intention d'être utilisé par des amis de Base (voir exemple ci-dessous). Rappelez-vous les fonctions de protected (et constructeurs) ne peuvent être appelés à partir des classes dérivées et les classes de friend.

class Sample;
class Base
{
    friend class Sample;
protected:
    Base() {}
};

class Sample
{
 public:
   Sample()
   {
      //invoking protected constructor
      Base *p = new Base();
   }
};

Autres conseils

Si ça va toujours être une base (un « mixin »), oui. Gardez à l'esprit une classe avec des fonctions virtuelles pures sera toujours une base, mais vous aurez pas besoin de le faire, car il ne peut pas être instancié de toute façon.

De plus, donnez-lui soit un destructor public virtuel ou un destructor non virtuel protégé .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top