Multiple-Inheritance - Ein glück gibts das nicht.
Aaaah!
Zum Glück. Zum zum zum
Mehrfachvererbung kann man sehr wohl sehr nutzbringend verwenden.
Ein Spielzeugauto erbt von der klasse und Auto und Spielzeug ...
Meine aktiven C++-Zeiten sind leider etwas her. Wir haben aber schon nützlichere Sachen als
das damit implementiert.
Operation Overloading - OK. Da kann man manchmal ein paar Quellcodezeilen einsparen.
Operatorüberladung ist nicht dazu da, Quellcodezeilen einzusparen, sondern den Code lesbarer zu machen. Etwa
mp := (a + b) / 2;
statt
mp.Assign(a.Plus(b).DivideBy(2));
für Vektoren/Punkte.
Ok. Ich bin aber in einem Umfeld untwerwegs bei denen ich das bisher nicht vermisse und auch wenn es dies gäbe auch nicht wüsste wie ich es (bei uns) sinnvoll einsetzen könnte.
Naja:
Du bist in
einem Umfeld unterwegs... das ist jetzt kein gutes Argument.
Wir benötigen z.B. viel Geometrie in unseren Programmen, mussten aber "damals" mangels OÜ im a.Plus(b)-Stil arbeiten. Das macht keinen Spaß.
Templates - Für was was man mit anderen Sprachfeatures nicht genauso gut lösen kann.
Standardbeispiel für Templates/Generics sind Containerklassen. Wie kriegst du die denn ohne T/G genauso gut hin? Cast-Orgien gelten nicht!
Du sprachst von Templates. Generics will ich schon behalten. Also was bekommt man mit T besser hin wenn man G hat?
Wie gesagt - meine Generics-Erfahrungen sind eingeschränkt. Z.B. wollte ich als Fingerübung in XE2 einen
Unicode-fähigen Ersatz für ShortString und string[N] schreiben. Das wäre mit Templates nicht besonders schwierig gewesen. Mit den Generics von XE2 war das ein Gewürge aus kryptischen Fehlermeldungen und internen Compilerfehlern.