J'essaie d'étendre une application existante en utilisant une bibliothèque agile. La bibliothèque me force à créer une classe d'interface concrète, InterfaceToA
pour interfacer avec mon application. Cependant, dans mon application, l'endroit le plus naturel (sans un refactor majeur) pour instancier cet objet est dans l'implémentation d'une autre classe, disons ClassA
. J'ai vraiment besoin de la classe d'interface pour avoir accès à toutes les données et fonctions membres ClassA
(hériter de). Donc, quelque chose comme:Héritage et instanciation C++ des classes dépendantes
// Class declarations
class ClassA {
public:
double thing1;
double thing2;
f(double arg1, double arg2);
ff()
};
class InterfaceToA : public ClassA {
public:
g(double arg1, double arg2);
};
// Class implementations
double ClassA::f(double arg1, double arg2){
InterfaceToA interface;
return interface.g(arg1,arg2);
}
double ClassA::ff(){
return 1;
}
double InterfaceToA::g(double arg1, double arg2){
return (arg1 + thing1) - (arg2 + thing2) + ff();
}
//Main function
int main(){
ClassA myClassA;
myClassA.thing1 = 1;
myClassA.thing2 = 3;
double output;
output = myClassA.f(5,1);
std::cout << str(output) << std::endl;
return 0;
}
où dans ce cas prévu output
serait 3
, (5+1) - (1+3) + 1 = 3
. Est-ce possible en C++, j'ai essayé de penser à cela en utilisant à la fois l'héritage et les classes imbriquées, mais je peux très bien comprendre comment procéder.
Et la question est? Je ne comprends absolument pas où vous avez un problème, peut-être http://ideone.com/ZXils? – Arpegius
On ne sait pas quelle est votre question. Normalement une interface comme 'InterfaceA' serait quelque chose que' ClassA' implémente. Alternativement, l'interface pourrait contenir une instance de 'ClassA' en tant que membre, puis utiliser cette instance dans des méthodes comme' InterfaceToA :: g' pour calculer les résultats. –
Ma question est: est ce que j'ai besoin de faire et proposé ci-dessus valide/légal? – johntfoster