pour une raison quelconque, je pense à l'implémentation de l'interface dans une certaine fonction (méthode) en tant que classe locale.Implémenter une classe abstraite en tant que classe locale? avantages et inconvénients
Considérez ce qui suit:
class A{
public:
virtual void MethodToOverride() = 0;
};
A * GetPtrToAImplementation(){
class B : public A {
public:
B(){}
~B(){}
void MethodToOverride() {
//do something
}
};
return static_cast<A *>(new B());
}
int _tmain(int argc, _TCHAR* argv[])
{
A * aInst = GetPtrToAImplementation();
aInst->MethodToOverride();
delete aInst;
return 0;
}
les raisons pour lesquelles je fais ça:
- Je suis paresseux pour mettre en œuvre la classe (B) dans des fichiers séparés
- MethodToOverride seulement les délégués appellent vers une autre classe
- La classe B ne doit pas être visible par les autres utilisateurs
- pas besoin de s'inquiéter ab en supprimant aInst puisque les pointeurs intelligents sont utilisés dans la mise en œuvre réelle
Donc, ma question est de savoir si je fais ça correctement?
Merci d'avance!
Pourquoi ne pouvez-vous pas définir complètement 'B' (non local) dans le fichier d'implémentation de' A'? –
Juste un nitpick, mais A devrait avoir un destructeur virtuel – jpalecek
A est juste une interface - déclarée dans un fichier d'en-tête. De plus, B ne peut pas être visible en dehors de l'unité de traduction où GetPtrToAImplementation est défini. – sinek