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

1

11.02.2008, 21:09

Kapitel 4.8 Seite 107 (überladende funktionen)

Puhh... sicherlich wieder eine "blöde" frage von mir...
aber ich hab mir jetzt das Kapitel bis dahin ein paar mal durchgelesn und ich verstehe da einfach was zu dem Listing 4.7 nicht :-(

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
bool testBereich (int Position, int Main, int Max);

int main ()
{

int Minimum = 0;
int Maximum = 0;
int xPosition = 0;

cout << "Spielerposition auf der x-Achse: ";
cin >> xPosition;

if (testeBereich (xPosition, Minimum, Maximum) == true)
cout << "Spieler ist noch auf dem Bildschirm" << endl;
else
cout << "Spieler ist ausserhalb des Bildschirmes" <<endl;
return 0;

// testBereich

//

bool testBereich (int Position, int Min, int Max)
{
if ((Position >= Min) && (Position < Max))
return true;
else
return false;
}


Was ich jetzt nicht verstehe.....
In der bool Funktion die oben erstellt wird sind wurden ganz andere Variablen als in der Main Funktion erstellt.
Okay ich weiss jetzt das die äusseren Funktionsnamen eigentlich nichts mit den anderen zu tuen haben müssen.

Aber:

C-/C++-Quelltext

1
2
3
4
5
6
// testBereich

//

bool testBereich (int Position, int Min, int Max)
{
if ((Position >= Min) && (Position < Max))
}


Verstehe ich nicht.... Wie er diese Werte in der "int Main()" erkennt weil die Variablen ja ganz anders heißen.

Ich würde es jetzt so Programmieren:

C-/C++-Quelltext

1
2
3
4
5
6
// testBereich

//

bool testBereich (int xPosition, int Minimum, int Maximum)
{
if ((xPosition >= Minimum) && (xPosition < Maximum))
}

Ich würde jetzt so denken, das er die Variablen in der "int Main()" nicht erkennt. Weil sie ja ganz anders heißen

Also ich verstehe einfach nicht warum die Variablen aussen komplett anders behandelt werden vom namen her.

Ich hoffe das mir auch hier jemand es irgend wie schafft es mit einfachen worten zu erklären.

Großen dank schon mal für die mühe.

2

11.02.2008, 21:13

Die Variablen in der Funktion haben nichts mit denen in main zu tun! Durch

C-/C++-Quelltext

1
testeBereich (xPosition, Minimum, Maximum)
werden die Variablen xPosition, Minimun und Maximum an testeBereich übergeben. Es handelt sich dabei um eine Übergabe bei Wert, da die Werte Variablen kopiert werden.
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Terep

Frischling

Beiträge: 46

Wohnort: Region Hannover

  • Private Nachricht senden

3

11.02.2008, 22:04

Das Gefühl, es nicht ganz verstanden zu haben, kenn ich auch

Wenn Du etwas Neues gelernt hast. Investiere Zeit. Es gibt jede Menge Kleinzeug, was man schon jetzt programmieren kann. Dabei wirst Du merken, dass es noch eine ganze Menge Ungereimtheiten mehr gibt.

Bist Du zu schnell im Buch, wird es immer stressiger. Schalte einen Gang runter beim Lesen und programmiere mehr. Macht dann auch einfach mehr Spaß.

Terep :)
Avatar = „Odyssee im Weltraum“
Film von Stanley Kubrick (Warner Brothers)
nach dem Buch von Arthur C. Clarke.
It will becoming true ?!!

Nelrim

Frischling

Beiträge: 33

Beruf: Entwicklungskonstrukteur

  • Private Nachricht senden

4

11.02.2008, 22:05

Re: Kapitel 4.8 Seite 107 (überladende funktionen)

Also zunächst mal hast du das falsch abgetippt, da steht

C-/C++-Quelltext

1
bool testeBereich (int Position, int Min, int Max); // Prototyp


nicht int main()...

aber das nur am Rande...

Grundsätzlich habe ich das so verstanden das man bei der deklaration einer Funktion nur definiert was für parameter denn so an die Funktion übergeben werden... wichtig scheint hier lediglich zu sein von welchem typ die sind und in welcher reihenfolge.

also die Funktion testeBereich erwartet nen int wert, dann nen int wert, und dann noch nen int wert.
wie die heissen ist der funktion scheissegal hauptsache sie kriegt 3 int werte.

innerhalb der funktion heissen die dann so wie es im prototyp definiert wurde.

also beispiel

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void ichbineineFunktion (int Hans, int Bernd, int Jörg); // Prototyp


int main ()
{
// Variablen


int Lisa = 25;
int Hanna = 39;
int Gerhard = 40;

ichbineineFunktion (Lisa, Hanna, Gerhard); // Funktionsaufruf und 3 int variablen hinschmeissen


return 0;
}

void ichbineineFunktion (int Hans, int Bernd, int Jörg)
{
int zusammen = 0;

zusammen = Hans + Bernd + Jörg; // in Wirklichkeit werden aber die Werte von Lisa und Hanna und Gerhard hier addiert.

}


verdreht man bei der Übergabe noch die Reihenfolge so wird Hans nicht der Wert von Lisa sondern von Hanna oder Gerhard übertragen.

Schön deutlich wird das in Listing 8.21 auf Seite 274

Nelrim
Auch der längste Weg beginnt mit einem ersten Schritt.

SirForce

Alter Hase

Beiträge: 802

Wohnort: Süddeutschland

  • Private Nachricht senden

5

11.02.2008, 22:10

Aber dann bitte auch

C-/C++-Quelltext

1
2
3
4
5
//...

int Lisa = 25;
int Hanna = 39;
int Gerhard = 40; 
//...
Nichts behindert so sehr die Entwicklung der Intelligenz wie ihre vollständige Abwesenheit.

Michail Genin

Nelrim

Frischling

Beiträge: 33

Beruf: Entwicklungskonstrukteur

  • Private Nachricht senden

6

11.02.2008, 22:17

Zitat von »"SirForce"«

Aber dann bitte auch

C-/C++-Quelltext

1
2
3
4
5
//...

int Lisa = 25;
int Hanna = 39;
int Gerhard = 40; 
//...


ups recht haste :) ich editier das mal
Auch der längste Weg beginnt mit einem ersten Schritt.

7

12.02.2008, 10:26

hmm

was ich jetzt im grunde genommen nicht verstehe ist halt,
das in der Funktion folgendes steht:

C-/C++-Quelltext

1
if ((Position >= Min) && (Position < Max))

klar die variablen wurden so in der testBereich funktion ernannt.
Aber wie findet er die die vergleiche ob es nun größer oder kleiner ist in der Main funktion da wo es ja nun übergeben wird.

weil in der main Funktion heißen die Variablen werte ja:

C-/C++-Quelltext

1
2
3
int Minimum = 0;
int Maximum = 0;
int xPosition = 0;

Wie kann er denn jetzt auf ein mal wissen das sie nun anders heißen nämlich Position, Min, Max.

Nelrim

Frischling

Beiträge: 33

Beruf: Entwicklungskonstrukteur

  • Private Nachricht senden

8

12.02.2008, 11:37

Re: hmm

Zitat von »"djxitec"«

was ich jetzt im grunde genommen nicht verstehe ist halt,
das in der Funktion folgendes steht:

C-/C++-Quelltext

1
if ((Position >= Min) && (Position < Max))

klar die variablen wurden so in der testBereich funktion ernannt.
Aber wie findet er die die vergleiche ob es nun größer oder kleiner ist in der Main funktion da wo es ja nun übergeben wird.

weil in der main Funktion heißen die Variablen werte ja:

C-/C++-Quelltext

1
2
3
int Minimum = 0;
int Maximum = 0;
int xPosition = 0;

Wie kann er denn jetzt auf ein mal wissen das sie nun anders heißen nämlich Position, Min, Max.


nö, du mußt es dir so vorstellen... (zumindest stell ich es mir so vor) durch den Aufruf übergibst du der funktion 3 Werte also hier xPosition, Minimum und Maximum.
Die Funktion schluckt die Werte weil sie vom richtigen Typ sind. Sie benennt die Kopien in der Reihenfolge intern um in der du sie ihr hinschmeisst.

also aus int xPosition wird funktionsintern int Position, aus int Minimum wird int Min und aus in Maximum wird hier funktionsintern int Max.
(Lustig ist, wenn du die Reihenfolge beim Aufruf vertauschst kannst du aus int Minimum das funktionsinterne int Max machen und dich selbst mal schön verwirren.)


Mit diesen umbenannten Kopien der überreichten Variablen wird innerhalb der Funktion gearbeitet und irgendwas ermittelt das dann in diesem Beispiel als Rückgabewert an die main Funktion zurück geht. (true oder false) Die Kopien der Variablen bekommt die main Funktion nicht zu Gesicht.

Das ganze wird wie gesagt später im Buch klarer... verwirrend ist es für mich immer dann geworden wenn die funktionsinternen namen tatsächlich die gleichen waren wie in der übergebenden funktion (int main()) denn dann versuche ich regelmässig sie dort zu ändern, was der int main aber egal ist denn auch dann sind es nur gleichnamige kopien der originalparameter von denen die übergebende funktion nichts mitbekommt.
Auch der längste Weg beginnt mit einem ersten Schritt.

GR-PA

Treue Seele

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

9

12.02.2008, 19:48

Oder ganz einfach formuliert:
Wenn in der main()-Funktion an die Funktion testeBereich Variablen übergeben werden, wird der Inhalt der übergebenen Variablen(also der, in der main()-Funktion deklarierten und gefüllten) in den Parametervariablen der Funktion testeBereich gespeichert. Also nehmen diese Variablen den Wert der anderen an. Wenn man dann die Größe der Variablen prüft, prüft man ja automatisch die Größe der Variablen in der main()-Funktion, da diese den gleichen Wert haben. Ob die Variablen den gleichen Namen haben ist also total egal. Sie müssen nur vom selben Typ sein.
Signaturen werden überbewertet

Werbeanzeige