Ich habe eine generelle C++ / Programmier Frage?

... komplette Frage anzeigen

4 Antworten

Also das Thema Pointer und Referenzen ist für den Anfang echt schwer zu verstehen. Ich programmiere inzwischen seit mehreren Jahren in C++ und ich kann dir hier mal ein ganz kleines Beispielliefern:

Angenommen du hast eine abstarkte Klasse Gui. Außerdem hast du eine Klasse Button, welche von Gui erbt. Es werden auch einige Methoden überschrieben. Um nun einen Button zu erstellen, kann man keine Instanz von Button erstellen, da Button von einer abstrakten Klasse erbt.

Hier nochmal ein Link, der es zusätzlich nochmal veranschaulicht: https://blog.penjee.com/wp-content/uploads/2015/02/pass-by-reference-vs-pass-by-value-animation.gif

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von zantes
10.11.2016, 18:01

Danke dir das GIF hat mir geholfen !! :)

1

https://wiki.unrealengine.com/Entry_Level_Guide_to_UE4_C%2B%2B
Unten werden Pointer geklärt. Das ist zwar eine Unreal Engine Seite, aber es wird da allgemein erklärt. Es ist bis jetzt die einzige Seite im Internet, durch die ich den Sinn verstanden habe. Ließ dir das auf jeden Fall durch, falls du kein Englisch kannst mit Google Übersetzer.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von zantes
10.11.2016, 18:00

Ich Programmiere spiele in Unreal und Unity deswegen perfekt danke dir auch !! :)

0

Da gibt es so einige Unterschiede . Ich nenne mal das Problem mit dem Speicher

Machen wir mal ein Objekt mit 4 Million Schülern

Nehmen wir an für jedes dieser netten Objekte brauchen wir

10byte bis 10kbyte

Wenn wir nun die 4 Millionen Schüler anlegen ohne Pointer , dann müssen wir
jedem Objekt schon vorher einen Speicher von 1MB geben .

4 Millionen * 10byte = 40MB ... kein Problem

4 Millionen * 10kbyte = 40GB ... unser PC hat 16GB , also werden mit glück schon mal 24GB auf die Festplatte ausgelagert :( Oder dein Programm kackt gleich ab , Out of Memory)

haben wir jetzt 4 Millionen Pointer und nehmen wir an ein Pointer bräuchte nur 1 byte (geht natürlich nicht , aber so können wir hier leichter rechnen )

so könnte ich die 4 Millionen *1 byte  = 4MB im speicher halten und trotzdem jedes objekt ansprechen , egal obs nun noch im ram ist oder in der auslagerungsdatei auf der festplatte .

will ich einer funktion die 4 Millionen Objekte zum Arbeiten übergeben ,

so müsste man ohne Pointer die Objekte kopieren , haben wir gleich wieder ein Speicherproblem .

übergeben wir das ganze nur via pointer würde das funktionieren .

das ist natürlich alles gelogen , aber zeigt wie sinnvoll ein  pointer sein kann .

es ist also  viel sinnvoller ein pointer auf eine speicherstelle zu haben die vom typ klasse ist , wobei die klasse sagt was für eine datenstruktur folgt .

den pointer können wir überall nutzen , sogar in eine  liste speichern ohne die ganzen daten die zu dem objekt  gehören (worauf die pointer zeigt)  zu kopieren . ich könnte einfach ein paar pointer aus der liste löschen ohne das die objekte verschwinden und hab z.b. von den 4 millionen schülern nur noch die hauptschüler in der liste .

eine weitere liste besteht dann z.b. aus Real und Hauptschülern .

Beide Listen zeigen nun jeweils auf die gleichen einzelnen Schüler ohne

das ich ein problem mit dem speichern  hab und durch das ganze kopieren sogar noch ein geschwindigkeitsproblem hätte .


pointer bzw referenz auf ein objekt :)

Aber es gibt noch viel viel mehr schicke möglichkeiten durch die pointer .

https://de.wikipedia.org/wiki/Zeiger_(Informatik)#Vorteile

ein anderer fall wäre das ich die klasse auf die  der pointer  zeigt ändern könnte , z.b. von Schüler zu Lehrer und auf einmal wird aus dem schüler ein Lehrer . Nun hat der Lehrer aber noch viel Mehr Daten hmm , ja da müsste ich ja schon beim Compilieren wissen das ich wohl doch lieber für Alle Objekte einen Lehrer nehme und dann nur das was ein Schüler an Daten hat ausfülle , könnt ja sein das es mal ein Lehrer wird :/ Aber mit mehr Daten kann ich dann wieder nur weniger Lehrer Objekte anlegen (die brauchen ja mehr Speicher) .

du siehst , bei programmiersprachen sind pointer sehr beliebt , weil sie ihren zweck gut erfüllen .

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von RakonDark
10.11.2016, 18:57

da hab ich was nicht korrigiert

Wenn wir nun die 4 Millionen Schüler 
anlegen ohne Pointer , dann müssen wir
jedem Objekt schon vorher einen
Speicher von 10kbyte geben .
0