Comment déclarer un constructeur de copie dans une classe dérivée, sans constructeur par défaut dans la base?
Veuillez prendre un coup d'oeil sur l'exemple suivant:
class Base
{
protected:
int m_nValue;
public:
Base(int nValue)
: m_nValue(nValue)
{
}
const char* GetName() { return "Base"; }
int GetValue() { return m_nValue; }
};
class Derived: public Base
{
public:
Derived(int nValue)
: Base(nValue)
{
}
Derived( const Base &d ){
std::cout << "copy constructor\n";
}
const char* GetName() { return "Derived"; }
int GetValueDoubled() { return m_nValue * 2; }
};
Ce code tient en me jetant une erreur qu'il n'existe pas de constructeur par défaut de la classe de base. Quand je le reconnais tout est ok. Mais quand je n'ai pas, le code ne fonctionne pas.
Comment puis-je déclarer un constructeur de copie de la classe dérivée, sans le déclarer par défaut du constructeur dans la classe de base?
Thnaks.
source d'informationauteur unresolved_external
Vous devez vous connecter pour publier un commentaire.
Appeler le constructeur par copie (ce qui est généré par le compilateur) de la base:
Et, idéalement, vous devriez appeler le compilateur a généré constructeur par copie de la base. Ne pense pas à l'appel de l'autre constructeur. Je pense que ce serait une mauvaise idée.
Vous pouvez (et devriez) appelez la copie de ctor de la classe de base, comme:
Remarque que j'ai tourné la Base de paramètre dans un Dérivé de paramètre, puisque seulement que l'on appelle une copie ctor. Mais peut-être que vous n'avez pas vraiment envie d'une copie ctor...