Hjælp mig til at forstå pointers i C++ .... please?

Tags:    c++

<< < 12 > >>
ok jeg har flere gange prøvet at forstå pointere men har opgivet...
jeg tror jeg forstår idéen med det, men jeg fatter ikke hvordan det på nogen måde kan være nyttigt :S
jeg ser det som at lave en kopi af et variabel, hvilket jeg ikke kan se nogen mening i...

anyway, sådan her har jeg forstået det:
hvis jeg har et variabel 'i' og giver det en værdi af 10 fx.
så laver jeg så en pointer til i... lad os kalde den for pI.
nu "pejer" pI på i, right?
hvilket vil svare lidt til at ligge en genvej ud på sit skrivebord, i den forstand at man ligger et ikon ud på skrivebordet som så holder adressen til den oprindelige fil, som genvejen peger på?
eller har jeg misforstået noget?

og selv hvis det er rigtig (hvilket jeg tvivler lidt på), kan jeg ikke se hvordan det skal komme mig til nytte, hvis de alligevel har den samme værdi? :S

kunne en af jer kloge mennesker ikke give mig et eksempel? ikke bare et eksempel hvor en pointer bliver brugt (dem har jeg set massere af), men et eksempel hvor det rent faktisk er nødvendigt at bruge en pointer.
altså noget der kan give mig en idé om hvad pointere fx. kunne bruges til, udover at lave kopier af sine allerede eksisterende variabler ...

desuden fatter jeg ikke helt hvornår '*' skal være foran eller bagved variablet, og hvornår '&' skal bruges.

og så har jeg et spørgsmål med hensyn til en klasse jeg arbejder lidt på:

da jeg prøvede at lave et objekt af min klasse gjorde jeg bare sådan her:

menuItem test = new menuItem("test", true, 't');

og det gav mig følgende fejl:

error C2440: 'initializing' : cannot convert from 'menuItem *' to 'menuItem'

jeg kunne jo se at det havde noget med pointere at gøre, så jeg prøvede at sætte et '*' tegn ind lidt forskellige stedder i linjen, og endte op med følgende som virkede helt fint:

menuItem* test = new menuItem("test", true, 't');

hvorfor er det lige at jeg skal lave en pointer til min klasse for at lave et objekt? :S
det forstår jeg ikke helt :S


og for at i ikke skal køre helt træt i dumme spørgsmål om pointers, har jeg et lille bonusspørgsmål :P

hvordan kan jeg loope igennem alle objekter i en klasse, og så udføre et eller andet, for hvert objekt?
jeg prøvede med følgende, men det virkede ikke:

for each(object i in menuItem){ ... }

kan i hjælpe mig der?

på forhånd tak :D

-Craksy





Der er ingenting i klassen der holder styr på de objekter der kommer fra den.

Det kan du dog selv lave med pointers hehe :D.

Du kan enten lave en 'ydre klasse', en slags liste/container hvor du holder styr på det sidste nye objekt du har lavet. Og alle objekterne skal så indeholde en pointer der peger på det næste element i containeren. Når du laver en ny sætter du det sidstlavte til at pege på det endnu mere nye objekt. Det nyeste objekt sætter du så til at være det sidslavte osv..

Eks.

Sidstlavte = NULL
--------------------
A -> NULL
Sidstlavte = A
--------------------
A -> B -> NULL
Sidstlavte = B
--------------------
//Putter C på:
A -> B -> C -> NULL
Sidstlavte = C

osv..
Her skal du dog passe på ikke at lave noget med NULL pointerne.

Dette kaldes en linked liste.

Eller hurtigere og simplere men måske ikke så objektorienteret er at lave en liste/vector/array eller anden datastruktur, f.eks. en fra .net. Her skal du have pointere som peger på dine objekter. Så kan 'for each' over din liste/sekvens og gøre noget med dine objekter.





Jeg vil da mene at der er siturationer hvor pointere er nødvendige.

lad os sige vi har tre klasser a, b og c. Vi kan sige at c er en slags data klasse, hvor der ligger noget data, som a vil ændre i, og b vil vise det. Så bliver a og b nødt til at have adgang til den SAMME instans af c. Det kan man gøre ved at give a og b en POINTER til en instans af c.
Fold kodeboks ind/udKode 

(har ikke checket om jeg har lavet nogle syntaks fejl, så det er ikke sikkert det er compilere, er også kommet til at bytte om på store og små bogstaver i forholds til hvad man plejer at gøre...)

En anden ting man kan bruge det til er polymorphisem(stave?), men det vil jeg ikke forklare her. (link til wikipedia: http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming)

Så jo, nogle gange er det nødtvendigt at bruge en pointer.

Angående dit spørgsmål om: "hvordan man looper igennem alle objekter af en klasse" eller "hvordan kan jeg loope igennem alle objekter i en klasse"

Så er jeg ikke helt sikker på hvad du mener, for det første er der ret stor forskel på de to spørgsmål (i/af en klasse) og for det andet er det vist ikke mugligt. Men er heller ikke sikker på om du mener hvad du skirver :P

At loope igennem alle objekter I en klasse, ville være at loop igennem alle de variabler der er i den(i klassen c fra forrige eksempel ville det være someData og someOtherData)

At loope igennem alle objekter AF en klasse, ville være at loope igennem alle de instanser der er lavet af en klasse.
(objekt = instans af klasse).

Er ret sikker på ingen af de to ting er mulige, kan du give et eksempel på hvad du vil?

Undskyld alle de stave fejl der sikkert er i det jeg lige har skrevet :P



<< < 12 > >>
t