Allgemeine Frage zu OOP,... Ordnung muß sein
-
Mein Beispiel war nur mal eben hingerotzt. Es gibt durchaus Möglichkeiten, die Konvertierungsoperatoren wegzulassen bzw. zu ersetzen, und arithmetische Operatoren zu implementieren ist in dem Fall bestenfalls eine Anfängerübung. Ich habe auch nicht behauptet, dass all das besonders schön oder elegant aussähe, ich wollte lediglich darauf hinaus, dass derartige Wrapper als Typsicherheits-Schutz möglich sind, aber eben nicht so schnell zu erschaffen wie in Ada.
Im Übrigen gabs grade für dein Beispiel (physikalische Werte) vor einiger Zeit ein Beispiel hier im Forum, wie man eine entsprechende Bibliothek aufbauen könnte:
template <int length_dim, int time_dim, int weight_dim> class PhysicalUnit { double value; //in kg/m/s - System //... }; //Diverse Operatoren... //typedefs für gebraeuchliche Groessen: typedef PhysicalUnit<1,0,0> Length; typedef PhysicalUnit<2,0,0> Area; typedef PhysicalUnit<1,0,-1> Velocity; typedef PhysicalUnit<1,0,-2> Acceleration; typedef PhysicalUnit<0,0,-1> Frequency; //... struct Units { const static Frequency Hz; //Frequency(1) const static Length cm; //Length(0.01) const static Acceleration grav; //Acceleration(9.81) const static Length inch; //Length(0.0249) }; int main() { Length breite = 5 * Units::cm; Length laenge = 10 * Units::inch; Area flaeche = breite * laenge; }Damit gehen dann solch sinnfreie Rechnungen auch nicht mehr.
-
Ich habe ja auch gar nicht gesagt, dass es überhaupt nicht geht. Es ist nur sehr mühsam und produziert zusätzlichen Code. In Ada werden einfach die Typnamen verglichen. Das ist schon einfacher.
Du solltest vielleicht noch auf boost.units verweisen, wenn Du da schon abguckst.