Ny til c++: Fatter hat af funktioner

Tags:    c++

<< < 12 > >>
Jeg har besluttet mig for at lære c++. Det er et rimelig overvældende sprog og meget svært, men jeg synes det går stødt frem ad.
I min online guide er jeg dog nu kommet til noget som jeg simpelthen ikke kan forstå:
http://cma.zdnet.com/book/c++/htm/ch10.htm

I listing 10.2 støder man på følgende i linie 14:
void DrawShape(USHORT aWidth, USHORT aHeight, BOOL UseCurrentVals = Â FALSE) const;

Hvad betyder  FALSE?

Senere i linie 29-33 skifter funktionen DrawShape lige pludselig parametre til width, height og UseCurrentValue i stedet for aWidth, aHeight og UseCurrentVals som står i prototypen i linie 14. Hvorfor og hvordan?

Og så lige den sidste ting: I linie 22-25 bliver constructoren defineret. Hvad betyder:
itsWidth(width),
itsHeight(height)
{}
og hvorfor er kroppen tom?

Håber i kan hjælpe, på forhånd tak :)

[Redigeret d. 10/02-06 20:15:27 af noname]



Mange tak for hjælpen, det forklarede en del. Nu er jeg imidlertidig stødt ind i et nyt problem. Jeg har kastet mig over at lave et program der kan løse 2. grads ligninger og lave arrays af 2. grads ligninger. Problemet er som følger:
Jeg har deklareret en pointer til en klasse. Pointeren hedder parPoly, klassen hedder Poly og er en klasse der beskriver 2. grads ligninger.
Når man laver en (dynamisk i dette tilfælde) array af 2. gradsligninger (altså af klassen Poly) skulle pointeren gerne pege på denne array. Det er imidlertidig et problem når jeg initialiserer værdien af ligninger, for i denne proces bliver pointeren lavet om til klassen selv. Det er altså ikke længere en pointer til Poly, det er selv blevet en Poly. Koden ser således ud:
Fold kodeboks ind/udKode 


Det er ikke noget stort problem, men jeg undrer mig bare hvorfor.
I øvrigt så undrer det mig hvorfor programmet udfører et uendeligt loop hvis man ved en fejl kommer til at skrive decimal tal med komma (,) i stedet for punktum (.).


[Redigeret d. 19/02-06 16:53:30 af noname]



Pointeren peger også på array'et.

Hvis du har:
int *pi = new int [123];

Så kan du tilgå dette med:

pi[30] = 123;
eller
*pi = 123;
Den første sætte pi's 30. element, den anden det første.

Hvis du har
class X
{
public:
int x;
};

Kan du oprette et array af disse:
X *px = new X[123];

Og tilgå disse med:

px[30].x = 20;
eller:
px->x = 123;
Den første sætte px's 30. element, den anden det første.
(eller har jeg misforstået spørgsmålet?)

Med hensyn til at gå ind i en uendelig loop: Det er et af problemerne ved at bruge >> til at læse fra tastaturet. Hvis brugeren er så flink at trykke det rigtige hver gang går det fint. Hvis ikke kommer der til at sidde snavs i røret, og det kan være mere end svært at få ud.

En løsning:
ttp://home20.inet.tele.dk/midgaard/tipc20050131.html

Det var nok bedre om du oprettede et nyt spørgsmål når du har et nyt spørgsmål.



Kunne godt være jeg skulle oprette en ny tråd til hvert spørgsmål men så ville jeg jo bare overfylde forummet med mine spørgsmåle :)
MAnge tak for dit link, prøver at se om jeg kan implementere det senere.

Jeg tror du har forstået mit spørgsmål korrekt. Problemet er bare når jeg skal bruge pointeren parPoly[i ] som parameter i en funktion der tager en pointer til en Poly som argument. Så får jeg en compile error der siger at den ikke kan konventere fra Poly til * Poly. Men det er altså så fordi at parPoly[i ] er selve objektet og ikke en pointer? Det betyder bare *parPoly + iX bytes?



parPoly er en pointer, parPoly[x] er det x'te element, dvs ikke en pointer.

Så hvis du har:
void Foo(Poly* p);

Og vil kalde denne med det x'te element af parPoly skal du bruge:
Foo(&parPoly[x]);

Eller (som der det samme):
Foo(parPoly + x)

Bemærk at + i det sidste tilfælde tæller elementer ikke bytes.

Problemet med at stille flere spørgsmål i samme er at der ikke er så mange der læser det, så chancen for at få rettidig hjælp er mindre.



Aha, det forklarer jo en del. Du skal have mange tak for hjælpen, det hjalp en hel del. Nu må jeg så se om jeg kan udvide mit program til at have et grafisk interface også :)



<< < 12 > >>
t