Aber gerade da geht C++ viel zu weit z.B. mit seiner Mehrfachvererbung
Da gebe ich dir absolut recht. Deshalb kennt SmallTalk ja auch keine Mehrfachvererbung und auch bei Delphi geht es nur über sog. Interfaces, die aber so gut wie niemand nutzt, ausser du musst irgendwelche komischen Windows COM Objekte einbinden . Aber das ist sowieso ein Kapitel für sich.
Im Head-First Buch "Design Patterns" gibt
es dazu ein schönes Beispiel mit einer Enten-Klasse, bei der man Verhalten wie fliegen oder quaken eben nicht vererben sollte,
weil es spätestens bei der Gummi-Ente Probleme erzeugt
Aber wahrscheinlich haben sich die Erfinder der Mehrfachvererbung gesagt: Moment mal...Supermann kann fliegen und hat einen komischen Gummianzug an, also muss er von einem Menschen UND einer Gummiente abstammen .
Aber gerade da geht C++ viel zu weit
Und wie schon Bjarne Stroustrup über seine eigene Programmiersprache so schön gesagt hat :
„C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off.“
Quelle: https://beruhmte-zitate.de/autoren/bjarne-stroustrup/
Neben der Vererbung gibt es aber noch einen anderes wunderschönes Konzept in C++ - Die Überladung.
Das ist richtig. Überladung macht auch sehr vieles leichter. Das können heute aber viele Programmiersprachen, nicht nur C++. Hier kommt es aber bei zu häufiger Nutzung natürlich zum gleichen Problem: Spaghetti-Code. In Delphi muss ich wenigstens die überladenen Funktionen noch mit dem Schlüsselwort overload markieren, um zu zeigen, dass ich weiss was ich tue. Bei C++ brauche ich das nicht, kann eine Funktion also (wenn auch unwahrscheinlich) versehendlich überladen.
Wer das Überladungskonzept allerdings eingeführt hat entzieht sich meines Wissens. SmallTalk braucht sowas ja eigendlich nicht, da ich bei jedem Parameter prüfen kann um was für ein Objekt es sich handelt und dann eben statt zwei Integer zwei Strings addiere, bzw. zusammenfüge.