C
Dravere schrieb:
camper schrieb:
Klassen, die sowieso nicht Teil einer solchen Hierarchie sind und kein polymorphes Verhalten haben, mit final zu kennzeichnen, ist dagegen sinnlos. Die Gründe, weshalb von solchen Klassen sowieso (normalerweise) nicht abgeleitet werden sollte, reichen aus. Der Programmierer, der es trotzdem tut, lernt nichts, wenn man es ihm explizit verbietet.
Das Argument erschliesst sich mir jetzt nicht so. Klassen von denen man nicht ableitet, sollte man deiner Meinung nach nicht mit final gezeichnen, weil man das sowieso nicht tut. Und falls jemand es doch tut, ist dieser selber Schuld? Also statt es zu verhindern, soll man Leute ins Messer laufen lassen, bzw. zulassen, dass schlechte Software produziert wird?
Nein, was ich meine ist, dass es nahezu keine Klassen gibt, von denen man nie ableiten sollte, sondern nur solche, von denen man es fast immer nicht tun sollte.
In C++ heißt ableiten ja nicht automatisch, dass man die Basisklasse als polymorphes Interface benutzen möchte.
Beispielsweise ist es umständlich, so etwas wie boost::compressed_pair zu implementieren, wenn final im Weg sein kann. Zudem gibt es dummerweise kein trait is_final (und es gibt wahrscheinlich keinen Weg, diese mit Sprachmitteln nachzubauen).