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

TigerClaw25

unregistriert

11

28.03.2013, 23:15

hmm stimmt.


gibt es eigentlich einen unterschied zwischen pClass = new Jaeger(); und pClass = Jaeger,

im buch wird beides abwechselnd verwendet ...

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

12

28.03.2013, 23:52

Rein technisch gesehen gibt es einen Unterschied, im konkreten Beispiel passiert aber am Ende beide Male dasselbe: Da Jaeger eine Klasse ist, wird so oder so der Default Konstruktor aufgerufen. Ich würde aber empfehlen, dass du dich, um der Konsistenz willen, für eine Variante entscheidest. Im Falle von new int vs. new int() würde es dagegen z.B. einen Unterschied machen, new int erzeugt einen int ohne ihn zu initialisieren (der Wert des int ist danach undefiniert) und new int() erzeugt einen int und initialisiert ihn mit 0.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »dot« (28.03.2013, 23:59)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

13

29.03.2013, 07:27

Die einzig meiner Meinung nach konsistente Weise wäre immer mit (), weil außer dem default-Konstruktor ohnehin alle anderen Parameter fordern. Dann hätte man mal new foo(bar); und mal new meh;, was ich persönlich nicht konsistent finde.
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]

Lexington

Frischling

Beiträge: 17

Wohnort: Berlin

Beruf: Student

  • Private Nachricht senden

14

01.04.2013, 02:39

Nochmal zum &-Zeichen, call by reference/value:

Das &-Zeichen ist im Prinzip ein Referenzierungsoperator.
In Verbindung mit Zeigern wird er genutzt, um die Adresse von z.B. Variablen zu ermitteln.
In dem Zusammenhang jedoch, also verbunden mit einem Datentyp (int& i, string& s),
bedeutet es, dass i oder s hier Referenzen sind (im Prinzip wie ein anderer Name für Variablen, die man zuweist).
Daraus folgt:

C-/C++-Quelltext

1
2
3
string t("test"); // String mit Literal "test" initialisieren
string& s = t;    // s als "Alias" für t einführen
/* Über s kann nun direkt die Variable t verändert werden */


Wenn man nun die Parameter von Funktionen angibt, kann man sich
einprägen:

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
void functionVal(string sText);
void functionRef(string& sText);

string t("Tütensuppe"); // t mit "Tütensuppe" initialisieren

/* t wird an die Funktion übergeben und in der Funktion wird ein alte
Variable sText erstellt. Der Inhalt von t wird in sText kopiert und sText
kann als alte Variable in der Funktion verwendet werden. Jede Änderung
an sText würde folglich t nicht mehr verändern */ 
functionVal(t); 

/* t wird an die Funktion übergeben und sText ist nun eine Referenz auf t.
Wenn man sText verändert, verändert man t!
Call-by-Reference arbeitet schneller als Call-by-Value und ist
daher für eigene Strukturen oder Klassen "geeignet" */
functionRef(t);

/* Nun soll aber der Inhalt von t in functionRef() nicht mehr verändert werden, weil 
diese Funktion z.B. eines Konsolenausgabe macht.
Also fügt man das Schlüsselwort "const" hinzu, sodass die Referenz in der Funktion
konstant ist und man daran keine Veränderungen vornehmen kann */
functionRefConst(const string& sText);


Quintessenz: (string sText) == (const string& sText) (wobei sie natürlich nicht wirklich "gleich" sind; eher das Ergebnis)
Wobei Variante 1 für die Standarddatentypen und Variante 2 für eigene Strukturen oder Klassen "empfohlen" wird.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Lexington« (01.04.2013, 02:51)


Werbeanzeige