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

24.10.2015, 22:44

Nein. Nein. Nein.
Wenn dann hast du etwas wie

C-/C++-Quelltext

1
2
3
4
class Cabrio : public PKW {
  private:
    std::vector<AddIn> addIns;
}

Und dann hättest du eine abstrakte Klasse AddIn, von der du ein AudioAddIn erben lässt.
Du hast offensichtlich riesige Probleme mit dem Verständnis von objektenorientiertem Programmieren.

Edit: Wobei addIns hier eigentlich eher ein protected-Member von PKW sein sollte. Aber egal, geht ja um die Anschaulichkeit.
Ich weiß, was Du meinst, allerdings kann ich das Auto dann nicht verändern.

22

24.10.2015, 22:50

Ich weiß, was Du meinst, allerdings kann ich das Auto dann nicht verändern.

Warum meinst du, dass du es dann nicht Verändern kannst?
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

23

24.10.2015, 22:50

Doch, natürlich. Hör endlich auf Dir Objekt-Orientierung auszulegen wie es Dir passt und lies was wir schreiben. Sonst mache ich das hier dicht.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

24

24.10.2015, 22:50

Nein. Nein. Nein.
Wenn dann hast du etwas wie

C-/C++-Quelltext

1
2
3
4
class Cabrio : public PKW {
  private:
    std::vector<AddIn> addIns;
}

Und dann hättest du eine abstrakte Klasse AddIn, von der du ein AudioAddIn erben lässt.
Du hast offensichtlich riesige Probleme mit dem Verständnis von objektenorientiertem Programmieren.

Edit: Wobei addIns hier eigentlich eher ein protected-Member von PKW sein sollte. Aber egal, geht ja um die Anschaulichkeit.
Ich weiß, was Du meinst, allerdings kann ich das Auto dann nicht verändern.

Wat. Inwiefern?
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

25

24.10.2015, 22:51

Warum sollte man es nicht verändern können. Es wurde ja wirklich schon oft gesagt. Ganz ganz wichtig ist, frage dich selbst ob eine Beziehung "ist" oder "hat" ist. In fast allen Fällen handelt es sich um eine "hat" Beziehung. So hat ein Auto eben auch ein Soundsystem und ist keins.
Was ich ziemlich merkwürdig finde, wir erklären es dir hier und jedes mal kommst du einfach mit einem neuen Beispiel um das genaue Gegenteil zu machen. Finde ich doch etwas auffällig. Wenn du trollen möchtest dann mach das bitte woanders. Oder such dir irgendeine normale Beschäftigung.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

26

24.10.2015, 22:52

Oh man!

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// um mal beim Auto zu bleiben
class Reifen
{
private:
     std::string m_Marke
     int m_ZollGröße;
public:
     Reifen(std::string _Marke, int _ZollGröße)
     {
           m_Marke = _Marke;
           m_ZollGröße = _ZollGröße;
     }
};

class Auto
{
private:
     Reifen m_Reifen
public:
    Auto(Reifen _Reifen)
    {
         m_Reifen = _Reifen;
    }
};

int main
{
     Reifen MeineReifen("Dunlop",17);
     Auto MeinAuto(MeineReifen);
}


So kannst du Individuelle Autos "Herstellen" ohne irgendwelchen quatsch über Vererbung zu machen!
Bei deinem Beispiel besteht das Problem, dass du die Klasse Auto verändern musst, wenn Du weitere Eigenschaften hinzufügen möchtest.

27

24.10.2015, 22:55

Warum sollte man es nicht verändern können. Es wurde ja wirklich schon oft gesagt. Ganz ganz wichtig ist, frage dich selbst ob eine Beziehung "ist" oder "hat" ist. In fast allen Fällen handelt es sich um eine "hat" Beziehung. So hat ein Auto eben auch ein Soundsystem und ist keins.
Was ich ziemlich merkwürdig finde, wir erklären es dir hier und jedes mal kommst du einfach mit einem neuen Beispiel um das genaue Gegenteil zu machen. Finde ich doch etwas auffällig. Wenn du trollen möchtest dann mach das bitte woanders. Oder such dir irgendeine normale Beschäftigung.

Hallo Freund,

wie schon gesagt, ich rede nicht von Vererbung, auch wenn ich es benutze. - Vielleicht ist mein Ansatz falsch, was bedeuten würde, dass mein Anliegen ersteinmal zurückgestellt werden musste um den Grundsatz zu diskutieren.
Was meinst Du mit trollen?

Ich lade mal ein Beispiel hoch

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

28

24.10.2015, 23:00

Du musst so oder so die Klasse Auto ändern oder ihre Komponenten. Egal ob Auto nun von irgendwas erbt oder dieses Irgendwas als Attribut deklariert. Nur ist Vererbung eben schlicht falsch an der Stelle.

Einfaches Beispiel für falsche Verwendung

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
class Mutter
{
   Farbe Augenfarbe;
};

class Kindergarten : Mutter
{
};

Kindergarten Kita;
Kita.Augenfarbe = Gelb;
Das macht keinen Sinn. Ein Kindergarten darf keine Augenfarbe haben. Durch Vererbung hat er die aber.

Richtig wäre:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
class Mutter
{
   Farbe Augenfarbe;
};

class Kindergarten
{
    std::vector<Mutter> Muetter;
};

Kindergarten Kita;
Kita.Muetter[0].Augenfarbe = Gelb;
Hier kennt der Kindergarten mehrere Mütter. Er ist aber selbst keine Mutter. Man kann aber trotzdem eine Mutter aus dem Kindergarten herauspicken und ihre Augenfarbe ändern.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

29

24.10.2015, 23:03

Bei deinem Beispiel besteht das Problem, dass du die Klasse Auto verändern musst, wenn Du weitere Eigenschaften hinzufügen möchtest.

Mein Beispiel war ein Beispiel! Ein Auto besteht halt nicht nur aus Reifen sondern auch aus Motor, Hupe und weiß der Geier was noch. Nach deinem System muss du auch immer wieder eine neue Klasse schreiben von dem dann dein Auto erbt!
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

30

24.10.2015, 23:10

Ich habe jetzt ein einfaches Beispiel hochgeladen.
Ich habe ein Fenster was mich mit der Eigenschaft erweitern möchte, es per Mausclick unten und Mausbewegung verschieben möchte:

C#-Quelltext

1
2
3
class MainWindow : public QMainWindow, MoveOnMouseClick
{
....


QMainWindow ist eine Klasse, MoveOnMouseClick auch allerdings nicht abgeleitet. Wie kann ich die Eigenschaft von MainWindow erweitern, ohne es neu zu schreiben?



Komplettes Beispiel:

test.rat.gz.base64
/Td6WFoAAATm1rRGAgAhARYAAAB0L+Wj4HH/DJRdADWZSXKHlmSk5mJmB6ULIyN/DdQxOdLhMIv1 xJWvz1PMOxKxlvVnJ1oO3Fn+tIcHLw8upz3NV71Xkm80/mF/zXPWaIzgpfPONjoOLuNhn8wxVGjO L9i7H0r0B0NrLfZexjdIyGt+D/ay1k57NykjiG7IaGpwJBi0trPwXKWf1h+xECg4IVWTVjs+UOA4 bfT18Nzwa8KOtefzjRJKWVhj5O+0YO0ehqIt4D/PaSSErPBkvOWBwacikgTNKCKgJZFusacI9Riu 3/Zoa1gHZVi/KH/5GEbsEyjF3ox4NZfCj45AMejKoDW6c6ekVuunshyzI8L+ul3bQYvzywKkqht7 lNRCBwzHLdMCLD7aPZi2CJ6ucFr5jMUwGJHvKvy96r8y5Fp2TD3ZShyA0paBttJztnZAAX7H9C8U qgz6U0Oxcxj5lyhWGY5y5fLzWF8FVLIpMqBG8auW2PR/wcNNHmu4hLqFjx3b1zUTPaD4WffQIdJQ hAf9Tkmq0N9xsiZEal/A/oO0AxNHENJVFJ7kZilALd9VTwtZlga+CZTilcRyNuNmyfWvyF6698sE 0zUqNrkk8rXKyw/uHvFMBqbLzq9btcaOuQPWssSxAkFIC8fA3wRMedJ+84viLO5d7pQ/QYVzS+7e OUT8Aos/OYQVea/DZjtf5uDGNDP8jC1/pOfNgW5qd3/e7ZFSJcf+x5fQCXsTIC9dpzHBm+F8TbOE loc55QlQz2TlDuFd06fDSjMvrYoEwSzUneA59YoNmtJACqf6NNYd9ygiy4i4kU4/3O8reWLYHBoF aPFTjOxnRQdvx7lI3ky1KyxkwiGwaQtPPurZ51ZxN4l6DSN/MMAG0Z2ubgpzfJyWau3JEZD0bCqk eW/11lenlsippMFMZJPI3R0utN7pV6dAwWIGMAhfMjDzOaLcZD46JZuxUGd+1qLpi8sqryKsNJBO czHjqLtq/iwnaCSDXSyGs0B5McFZn6GhJBOBt9A/FZ6nUZLMeUZdhgnW1zkfXC4TgksIKKww5LtK jqQ1E00OQ0USdstsmllQeuI/bAOujbuiEEK1K1/Yif5iThnJh/XjeVPR6xxV/BpsIVav4CTr7c4/ 1O2036Qg/SzqUdxg9SdasZGO7K0ykbzswwQHFppRpoJP5q1ohH56aJ8Y9glO2xjJf++V63+GrhNO JLFNCTAsw7Pwjnu8xTRTxy9saNyuh6vaw5raV1STZIJK8hKL1IHHfq19DU7FC2MwpESod0402UUQ QD6jU+/9KkNQrLH69wuyooboH+ADPFPLL56EokLPiNz9dYxtUZKNSq3etwSylYaLmJP50cliJeWw c5PwdJF57cv4SDkrLtOrV+SSElVI2nfb+dEaym0eV6Z5Z3yZuWNYvqakeh7CALHCdHRuPxWECl3b ryA06WXBCNhokwj7jWqkhITdKMBsM0cbQSL+gTVRyuJvXLNUrIjhMTsv1YgmHC8zEUGLXYK1WsfQ 5L6wjTvMqueebWOxfdhNHUQdZ09iia6Not4gBz07BLYv3AXRi/S9MQmjVz/QZExiUaJ6OLyztUqx J9lspS6Ok3iKL+IC8WDIZm63P8McCdqVsDt5xx2a6W6FohmlbraFVyIyy2ZT7c/XzLQRYsTt0F3B 0+VIFW2FilwXuDqv0YkfOuQ1Dx0FbdvjmmDmP7Y7cwM3CCvU6D8WLqWRGg3A0m8K9FxHG9hfp8Fz GNJSfOVpZIySWUI4siLqgnaE08UPbwHP+rEZfqsYH9LJY9fR73mAOY99+xx7hM22KHn4Vksx8X58 OaIvXPT3Wz6jGv3C6vebhUdzafM+rJuM9KsmTyp7n0jZowmVvBqobD6ZKhx31OX4dEwejMZvQQVH Z5Ema4gyP5uEAgdEV8dbCKWNq3dJb8JnVAHxJqujy3ALiNaqM4lMsTh1yuLK3Re4xw14Vs01AFUF yaYD7+CcsPE22eY227NYe5RvQHncr+A4LFj1hQCmBHdL9y6q6OE5wDyycQljP12eHgHE8ieZZZW5 Rhb25ZSyNcMiYPvQE6vHYbwj4IxL+ubO40Cj4PUO6U5CZS0WfgErx+SZtmusNqoQvSt6Hku+Wcr4 v7mOki0TYQkHWNKN8gs3z8LTcAT/+5FTn4NWYl32uh+9ZOI9zCtVfMQq9+oQaex4M1CY/WXiL1DO DqzDGGuI7Ha6g3dzfmvWP0Q994aKoOhC92f/y6ZWmP4tJ5KPDPhS0JHJzJRNpOK7GBeOwailBOcx zXKSzIteYQ1RT/SZ0phxNVKmjm0hDqXDWZRCQcvvgzh+oy4YmwVuVLrJd0DU/1C/hXo5iY2OT/bz nV+rz2Sw60hjI74CmamqalueFHn6TwYJQM5rALtAZlIidkwiJwX1swaNrgHEBee9HZYSqdpenL3P NIfbDN1xHfuYPa65FRuiVtQhdTJEc7rvwymqyhakirP2FeusK1OLBfCJj2w2KmfwVdgojxSkUS6Q f5q7zN+Ob7FutZQ+1hbwdcdyc00JDSO2EX7KZ2wrTtnR994uxr/MDutZgLw0g9eAWt0O3eIBx5wl qXq56BMHS/ptmB2TWH8rKKByhviHha/YTZNuB68E8sA4D8/DDKGsyZR8cRUl9knK7PC0nEt9hq0t 9J+lR9xZPAZlfDeZa0dVnXnA+NitiGZiZDO2nP4d1w4rqlV/qL0TDl8iLOs2ut/0kk9nrFP+jHtY 01QfUfqCxE1A2pmzO4/+uuYFwkMw01F+QLVXILWW6Cp/ma3Lg1L4egt0XU8X4B5iSM4Wf7tKrujW yT0odMhNI5JXuTyRgWn/7mg1GVQRxDN8shbOzsbUEghYQBNsdZR4hozbvKtwP5XS9oUys1nsAhz1 qUkacoQ9SS1su9C0nBgu6LwT+eddUVkrcgSj26B4+O8li13+Y/0xvFEO/iWngIHDEqcUH0VUUV/q 38bq3i0rEviLB5jW1Mg5TjUk7hp2laHd8phAgGN7PTudxfC1Z5z8lnGzAV75jJLVjTzTx/HHryI2 l3bYtzJcmR2GLrtt/rn3+Divw+Zf1X7SiSPaE5huVxQSTRUW7L/CrdNQYfUdb15MZXDJzMggb8LS eK3eIW8uXAkHWuVD7VWHEQ6ZJyFZHTFyqVamt7nJkaZt5GiGAQRkT3IhWwvtJIn5zA7gAvH/gadJ YUu57KswtQp8jBsDyAgUHUEgE8liKpcbB2DnHS7UcHE1RdJgFphxbPmJhrYQk/exsi2KlJXngCfr eR+yDoxx8DKx1dg4+xERcBcnFsfdCRmLVFk10L6OjuWoR+gS3qzgNMQZTRGZokOyM7Qi1IQgdwuZ xsbxJQDIV53Pd+gVj8pTqFzW78hVLC/BWW8AKD/LCyFVFqZM1TFAiK7aV2EfXlekt29dj3SkyCb8 Z8nVMkQszvVDYSAsWuLGhC/M/oMiNcp/7UUrmqv8XBoGOGTujlosZ8fIK4PhA6mb9ivrTRT+xA6k Y6L1E1eF4Sk5gfYmHL6Ew90fqRhJA61Iob0bg0P49M0W8ytwjxf1sA4sSpkUZbaDytjiaopfc/q+ MmYIujkGQtubXwEvxfO88XgYtMw8wdacSAb+MVFG9K5EaQCFxm1dnRRjAfrbG9AtFhs83aV4j/08 KLbmNZj/x7s/P4Z8beBUyhhyjmxc9eXEt6xL6U0yllX0kZbRr9kg8JL3a0YMWXeGM6sxdXEOzdgZ TMWIKXfKuviZkPuQe0x4Nk4aCUVf2ffBClN0oEJcCa+3/bY0hndluu2Y8G35areIFK7Ip8LEk2Wx PzWldsGN400Ew7smJMpXk5wEqOCzGCqgQTD3349XLocTZuKzwxVjDIOd4ogsLXuDS2wgRQemUhZ3 gCieOqabda+4HOIEzdQY28AuUDge4XTEHsedlQPbpWyJ96swMXSU45my458GuZ6of9oHFB2GNmDj F/uG2dxZaD5BjPN9dbKoOZLzm+X6YplMVHbhwNYMkOorkmwvBoRakDgrWAwIg7TMVIkbYcmaSUEl dnEHgI7GX9qIvnj3ALgegxwSA1oEXbg23YF2rWvJ/xHxl4LuBTeD1S816iFij6A6A8fQwKW+W9Wo yruTNkctW8f9Oe3Fjh/30XY8dI+k6CJj2FW5KoK+PgqytDA/Nl7Sbn8DOQ/js852fAkXdPmhZ6Fh omZ8T94u6kXJQODWt3Swg0SJz2FAruRUrCDtjktoW4yV4fTH1LCtEIkRRW4ZPufil/7pQpsukw44 UGn/QQzG8rgqsauOIy0NEEJG0Zi7Ty9tZX7slnlslsBqwFWx6ZZfNxiFuWuSHMdUMEvBTVxrSQrb 5+UAoTeTFWOR+D0AAbAZgOQBAF3Nxu6xxGf7AgAAAAAEWVo=

Werbeanzeige