Fournir les paramètres du constructeur de la classe de base lors de la création d'une instance de la classe dérivée
Est-il un moyen de fournir des paramètres du constructeur d'une classe de base lors de la nouvelle-ing une classe dérivée de l'instance? (Qui est, lorsque le constructeur de classe de base a des valeurs par défaut pour ces paramètres)
E. g.
class Base
{
public:
Base::Base( string name = "" )
: m_name( name ) {};
private
string m_name;
};
class Derived : public Base
{
public:
Derived::Derived() {};
};
Puis j'ai besoin de faire quelque chose comme ceci:
void main()
{
Base* instance = new Derived( "Jeff" );
};
De toute évidence, cela ne fonctionne pas. Est-il un moyen de nouveaux dérivés de l'instance et de fournir un paramètre dans le constructeur de base, sans avoir à fournir de ce paramètre dans le constructeur de classe dérivée.
Vous devez vous connecter pour publier un commentaire.
Pas.
Votre dérivé le constructeur de la classe doit prendre les arguments, et explicitement à les transmettre à la base le constructeur de la classe.
C'est le cas indépendamment du fait que vous utilisez
new
ou pas.Derived
constructeur explicitement l'invocation de laBase
constructeur dans son initialisation de la liste. Mais cela a un sens; le fait queDerived
est dérivé deBase
est un détail d'implémentation au moment de la construction; ce fait est essentiellement encapsulé.setName(string)
méthode dansBase
). Alors si quelqu'un défaut-construit unDerived
exemple, ils peuvent par la suite appelinstance.setName("Jeff")
.Vous ne pouvez pas le faire si vous voulez des noms distincts dans la classe de base. cependant distinctes nom n'est pas un critère, vous pouvez le faire en utilisant passage constant des littéraux:
La passe OU la valeur par défaut de constructeur de classe Dérivée.