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

Korowai

unregistriert

1

11.11.2016, 06:23

Polymorphie- Vector

Hi,

ich möchte mich mit dem Thema Polymorphie und Vector beschäftigen.

Im google und meinen Büchern habe ich bereits angefangen zu stöbern. Das nachfolgende Problem habe ich bisher über diese Quellen nicht lösen können.

Sei es, ich habe eine Basisklasse Bericht, und eine Unterklasse Auto.

ich möchte nun einen Vektor, der sowohl Zugriff auf Bericht als auch auf Auto ermöglicht, d.h. ein Vectorelement soll sowohl Membervariablen von Bericht als auch Auto beinhalten.

Ich habe da diverses versucht, jedoch noch nicht compiliert, da mir dämmert, dass es so nicht funktionieren kann.

Beispiel (nicht kompilierbar):

Klasse Bericht
public:
int a;
bool b;
string c;

Klasse Auto: public Bericht
public:
int d;
bool e;

Jetzt der Vector:

vector<Auto> Autoberichte;

Wenn ich jetzt den Vector über push_back fülle, und dann über den Zugriff Autoberichte[x].d=... zugreife, kann ich dann auch über Autoberichte[x].a=... zugreifen? Kann das so funktionieren, oder ist das Unfug?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

11.11.2016, 06:40

Also mal ganz langsam. Ein Auto ist kein Bericht. Das ist semantischer Unfug. Ein Auto ist eine Maschine. Es ist auch ganz sicher ein Fahrzeug. Aber es ist kein Bericht. Was du hier suchst ist keine Vererbung, sondern Komposition. Du solltest also eine Klasse Autobericht anlegen, die einen Member vom Typ Bericht und einen Member vom Typ Auto hat - sofern das ganze überhaupt Sinn macht. Aber Vererbung ist hier das falsche Mittel.

Insgesamt funktioniert das rein technisch problemlos, sofern die Syntax richtig ist. Ich vermute daher, dass du irgendwo einen Syntaxfehler hast, was aber mit der Funktionalität an sich nichts zu tun hat. Das sollte nämlich gehen.
Wie immer gilt hier wohl: Ohne konkreten Code kann man nur raten, was du falsch machst - außer diese Vererbung da, die gehört da definitiv nicht hin.
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]

Korowai

unregistriert

3

11.11.2016, 06:54

Hoppla,

kannst Du mir ein Beispiel für eine Komposition darstellen? Oder meinst Du damit die friend Funktion von Klassen?

Ich habe Komposition bisher noch gar nicht mitbekommen.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

11.11.2016, 06:56

Wie, du hast Komposition noch nicht mitbekommen?

C-/C++-Quelltext

1
2
3
4
5
class Autobericht {
public:
    Auto schadensfahrzeug; // "auto" ist ein C++ keyword
    Bericht bericht;
};
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]

Korowai

unregistriert

5

11.11.2016, 06:57

update:

Folgendes benötige ich.

Einen Vector, der eine Datensammlung fasst. Innerhalb der Datensammlung gibt es Elemente, die wiederum gekapselte Datensammlungen enthalten.

Also ein Vector einer Klasse, mit einer darin enthaltenen Klasse. WEnn das auch ohne Polymorphie geht, wäre ich über ein paar Tipps dankbar.

Korowai

unregistriert

6

11.11.2016, 06:58

update:

Glaube ich habe verstanden. Ich probiere das gleich mal aus. Danke.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

11.11.2016, 06:58

Wie ich schon sagte funktioniert das technisch absolut problemlos. Und wie ich auch schon sagte, brauchen wir deinen Code, weil du ja offensichtlich was an der Syntax falsch machst, da es nicht kompiliert.
Wenn du natürlich Polymorphie nutzt, kannst du auf die Attribute der spezialisierten Kindklassen nicht zugreifen, weil bei Polymorphie ja die Basisklasse verwendet wird, der diese Attribute eben nicht hat. Polymorphie funktioniert allerdings nicht auf Value-Typen, sondern nur auf Referenzen und Pointern. Falls du Value-Typen von der Basisklasse in den Vektor klöppelst, tritt "Slicing" auf und es wird von der Instanz der Kindklasse alles weggeschnitten, bis eine Instanz der Basisklasse übrig bleibt und das landet dann im Vektor.
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]

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »BlueCobold« (11.11.2016, 07:06)


TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

8

11.11.2016, 20:36

In dem Beispiel trat ja noch gar keine Polymorphie auf. Das Auto wurde ja immer nur als Auto benutzt, nie als Bericht. Ergo ist da auch gar keine Polymorphie noetig und BC Codebeispiel wesentlich sinnvoller.

Werbeanzeige