Est-ce que le design suivant est valide en C++?Classe d'abtraction dérivée d'une classe nominale. Est-ce valable?
#include <iostream>
#include <memory>
using namespace std;
struct Base {
virtual void SomeMethod() {
std::cout<<"Do Something"<<std::endl;
}
};
struct Der : public Base {
virtual void SomeMethod() override = 0;
};
struct DerDer : Der {
virtual void SomeMethod() override
{
std::cout<<"Do something derived."<<std::endl;
}
};
int main(int argc, char *argv[])
{
auto x = std::unique_ptr<Base>(new DerDer);
x->SomeMethod();
return 0;
}
Fonctionne sur g ++ 6.2.
Je dérive d'une classe normale, en convertissant cette méthode en abstraction, puis en la remplaçant après avoir dérivé à nouveau.
Est-ce correct en C++ de dériver d'une classe, puis de retourner une méthode implémentée à l'abstrait?
La raison pour laquelle je dois faire ceci, c'est que dans un grand programme, auquel j'ajoute des fonctionnalités, j'essaye de avoid a diamond model. Pour ce faire, je prévois de mettre toutes les méthodes courantes dans la classe Der
, et en faire tout hériter, sans jouer avec la classe Base
.
'Der :: SomeMethod' devrait aussi être' override'. Vous devriez appeler la méthode via un 'Base *': http://ideone.com/QJ5su3 – mch
@mch Mieux? :) ... –