Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

21

28.02.2012, 15:27

das ist was mir dazu einfällt, kann natürlich auch humbug sein.
Ist es. ;) Das public vererben ist nichts anderes, als eine "ist ein"-Verknüpfung. Das heißt, dass wenn man einen Klasse CBird hat, dass man von dieser eine Klasse CEagle oder CRaven ableitet. Eine Wurst ist kein Supermarkt, wie du bereits sagtest, also stimmt die "ist ein"-Verknüpfung nicht mehr und somit ist public vererben hier absoluter Schwachsinn. Richtig wäre es, wenn man zum Beispiel von CWare CWurst und CBrot ableitet, aber auch von CLebensmittel. Diese Mehrfachvererbung würde Sinn ergeben. ;) (Waren haben z.B. eine Anzahl, Lebensmittel einen Geschmack und Wurst und Brot beides).

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

22

28.02.2012, 15:27

Vererbung ist immer eine "Ist-Ein"-Bezeihung...

23

28.02.2012, 15:28

Ja. :) An dieser Stelle ging es eben AFAIK um public inheritance.

Das Schlimmste: in der zweiten Auflage wurden diese fatalen Fehler nicht behoben.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

24

28.02.2012, 15:32

das wurstbrot besteht aus brot und wurst, also ist ein teil des wurstbrots sowhl wurst als auch brot.

Also sollte die Klasse Wurstbrot aus einem Objekt vom Typ Wurst und einem Objekt vom Typ Brot bestehen. Und nicht von Wurst und Brot ableiten, denn ein Wurstbrot ist eben nicht sowohl eine Wurst als auch ein Brot, sondern besteht aus Wurst und Brot.

das ist meiner meinung nach schon richtig, nur etwas gewöhnungsbedürftige mehrfachvererbung.

Nein, das ist völliger Schwachsinn.

25

28.02.2012, 15:35

Zitat

Richtig wäre es, wenn man zum Beispiel von CWare CWurst und CBrot ableitet, aber auch von CLebensmittel.


ja, das macht in der tat mehr sinn, schon kapiert! danke.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

26

28.02.2012, 15:35

Private Vererbung heißt so viel wie "ist implementiert in Form von"...
Es wird nur die Implementierung geerbt und nicht die Schnittstelle. Das heißt im Grunde das selbe als würde man eine Instanz der Basisklasse als Member haben. Die Vorteile sind, dass man virtuelle Methoden überschreiben kann oder auf protected Member der Basisklasse zugreifen kann und sie sollte nur aus diesen Gründen angewandt werden.

(steht übrigens auch in Effective C++) :thumbsup:
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

27

28.02.2012, 15:38

Imo modelliert Vererbung immer eine "ist ein" Beziehung, egal ob public, private oder protected. Der Unterschied ist nur, wer von dieser Beziehung weiß. Nach außen wirkt private Vererbung vielleicht wie eine "hat ein" Beziehung, aber von innen betrachtet, ist es immer noch eine "ist ein" Beziehung. Das kann man natürlich unter Umständen wie ein "ist implementiert in Form von" interpretieren. Aber egal, lassen wir das, ich glaub das verwirrt jetzt nur ;)

28

28.02.2012, 16:18

..trotzdem finde ich den übergang hier fließend/verwirrend. in c++ spieleprogrammier erbt eine klasse CHybrid von CMinenleger und CJäger. ok, ein hybrid kann sowohl ein minenleger, als auch ein jäger sein, aber eben nicht ausschließlich eines der beiden. ist das denn hier nun auch so ein wurstbrotfrehler in abgeschwächter form?

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

29

28.02.2012, 17:05

Er ist ja auch nicht ausschließlich eins von beiden sondern gleichzeitg beides.
Egal wie du es wendest. Ein Wurstbrot ist niemals nie eine Wurst. Es ist eher ein Brot und hat Wurst.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

30

28.02.2012, 17:09

Das Wurstbrotbeispiel ist sowieso sehr schlecht, weil man nicht viel mit einer Wurst und einem Brot anstellen kann.
Das Hybridbeispiel ist ebenfalls nicht so gut, weil man für das Verhalten, wie z.B. das legen von Minen, Module programmieren würde, die jedes Raumschiff enthalten kann. Das ist ein wesentlich besseres Design und so benötigt man keine extra Minenleger Klasse und, noch wichtiger, keine Mehrfachvererbung.

Diese beiden schlechten Beispiele zeigen auch, dass es nicht leicht ist ein gutes Beispiel für Mehrfachvererbung zu finden, das Anfänger auch noch verstehen können.
Für dich bedeutet das: Vergiss erstmal die Mehrfachvererbung und sammel Erfahrung in der OOP. Sobald du sie Sinnvoll einsetzen kannst wird es dir wieder einfallen.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Werbeanzeige