Donnez Foo un constructeur qui prend un paramètre de base:
class Foo : public Base {
public:
explicit Foo(const Base &b) {
// do work to initialise Foo. You might want to include
Base::operator=(b);
// or you might not. Depends how Foo works, and what Base's
// constructors do.
}
};
Chaque fois que vous écrivez un constructeur unique argument, vous devriez considérer si oui ou non vous voulez spécifier « explicite ». "Explicite" est là pour dire que le constructeur ne devrait être utilisé que si vous avez explicitement écrit un appel de constructeur ou un cast. Si ce n'est pas là, alors le compilateur aussi « implicitement » convertir des objets de base de Foo, par exemple dans la situation suivante:
int doSomething(const Foo &f) {
return 23;
}
Base b;
doSomething(b); // doesn't compile
doSomething(static_cast<Foo>(b)); // does compile
Si vous avez supprimé le « explicite », puis doSomething(b)
serait compiler et faire la même chose en tant que deuxième ligne - construisez un objet Foo temporaire à partir de b, et passez-le à doSomething.
Pourquoi ne faites-vous pas: Foo * f = new Foo ;? –
Base b = nouvelle base; regarde bizarre à moi – MadH
Amendement: regarde * Java * à moi. –