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

1

27.03.2013, 15:16

String als Parameter in Kapitel 11

hallo,
hab ein Problem mit strings in Kapitel 11. das eine mal schreibt der autor:
void erstelleButton (const string &sText)

und dann ploetzlich ohne das & Zeichen.

bei den Memberlisten werden dann wieder die Zeichen & verwendet und in Kapitel 11.4 z.b im Konstruktor ueber this zeiger wieder ohne das & zeichen. hat jemand eine idee?

2

27.03.2013, 17:30

Schau im Inhaltsverzeichnis mal nach Referenzen und lies dir das Kapitel durch. Dürfte bei den Zeigern zu finden sein.

MfG
Check

TigerClaw25

unregistriert

3

27.03.2013, 17:41

Das habe ich getan. Aber wieso ist es ein Beispiel weiter ohne Adressoperator?
Verstehe ich es absolut nicht. Was den this Zeiger betrifft, denke ich mal, dass es damit zusammdenhaengt. ABer bei den beispiele zuvor waren keine zeiger.

Also einmal void fkt(const string &sText) und ikm naechsten beispiel ohne adressoperator ... spaeter bei dem this zeiger wird sogar nur das objekt uebergeben, aber im funktionskopf ein zeiger deklariert.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »TigerClaw25« (27.03.2013, 19:43)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

27.03.2013, 21:17

Eine Referenz und ein Pointer sind nicht dasselbe. Wie Checkmating schon sagte, lies das Kapitel nochmal.
fkt(const strinng &sText) deklariert KEINEN Pointer und benutzt auch keinen Adress-Operator.
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 1 mal editiert, zuletzt von »BlueCobold« (27.03.2013, 21:22)


TigerClaw25

unregistriert

5

27.03.2013, 22:11

nein, ihr habt mich falsch verstganden.

fkt ("xyz"); und void fkt(const string &sText) ...
das funktioniert ja, aber der autor hat dann ein beispiel weiter den adressoperator weggelassen, warum?]

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

27.03.2013, 22:18

Es ist kein Adressoperator.
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]

TigerClaw25

unregistriert

7

27.03.2013, 22:29

Ok, habe einen Unterschied im funktionskopf gefunden. Das eine iSt const string &sText, und das eine iSt ohne das const, also nur String sText. Ohne Referenz, verstehe das nicht...O

es gibt unterschiede, was auch mit call by ref. jnd call by value zutun hat. im zusammenhang hier ist mir das aber nicht klar ...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »TigerClaw25« (27.03.2013, 22:43)


MGBeginner

Frischling

Beiträge: 81

Wohnort: Limburg

  • Private Nachricht senden

8

27.03.2013, 23:30

Wo ist jetzt genau dein Problem ? Einmal wird es by Referenz und einmal by Value gemacht. Der Autor wird wohl beide Varianten zeigen wollen (habe das Buch nicht
gelesen, evtl. ergibt sich aus den Funktionsdefinitionen ein anderer Grund !). Oder ist dir unklar, wann und warum man welche Variante nimmt ? Dies sollte dann aber auch in dem Buch irgendwo erklärt werden. Oder stört dich eventuell nur das fehlende const bei der 2. Variante ?

TigerClaw25

unregistriert

9

28.03.2013, 08:48

Ok, schaue ich mir alles nochmal an. Habe jetzt noch zwei Fragen:

1. Wenn ich einen Zeiger auf einer Klasse innerhalb einer anderen Klasse habe, dann wird der Konstruktor doch erst aufgerufen, wenn ich innerhalb des Konstruktors der Hauptklasse mit new XYZ auch Speicher für den Zeiger auf eine Instanz der zweiten Klasse reserviere oder?

Zudem schreibt der Autor mal dies: m_pBewacher = new CJaeger(); und mal das m_pBewacher = new CJaeger;, also ohne Klammern ...

Ohne Zeiger würde aber der Konstruktor der zweiten Klasse gleich ausgeführt werden, da ich bereits ohne new eine neue Instanz innerhalb einer anderen Klasse habe ...



2. Mal so nebenbei zum Thema Klassen.
Warum muss man innerhalb eines Konstruktors, der z.B. eine String erwartet immer eine Zuweisung in der Form machen:

CWerft:CWerft(string sName)
{
m_sName = sName;
}

m_sName ist Membervariable der Klasse CWerft.


Könnte man nicht direkt diese sName-Variable ausgeben, ohne die vorherige Zuweisung?

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »TigerClaw25« (28.03.2013, 09:15)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

28.03.2013, 09:06

Wie willst Du etwas in einer anderen Methode ausgeben, was dort nicht bekannt ist? Die einzige (und sinnvolle) Änderung zu diesem Konstruktor da oben wäre einer mit Initialisierungsliste:
CWerft::CWerft(const string& name) : m_sName(name) { }
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]

Werbeanzeige