Avatar billede irsild Nybegynder
19. juni 2001 - 16:59 Der er 6 kommentarer og
1 løsning

Pointer

Person *person2 = new Person(\"Skipper\", 25);
person2->setAlder(26);

cout << person2->getNavn() << \" er \" <<        person2->getAlder() << \" år\"<< endl;

Jeg er ny i C++ og leger derfor lidt. Dette virker, men er det muligt at lave noget lignende uden at oprette person2 med new. Altså ved kun at sige f.eks Person *Person2;

Problemet er at hvis jeg ikke bruger new, virker følgende ikke:

person2->setAlder(26);
Avatar billede henrik_ffc Nybegynder
19. juni 2001 - 17:10 #1
Nej det kan du ikke.

Når du siger \"Person *person2\" fortæller du blot at person2 er en Person-pointer.
person2 indeholder ikke noget endnu og peger derfor ingen steder hen.

Ved new Person(\"x\",1) opretter du et element i hukommelsen så
Person *person2 = new Person(\"Skipper\", 25);
opretter elementet og tildeler værdien til Person-pointeren.

Først herefter kan du bruge indholder at pointeren.

Gav det mening ???
Avatar billede irsild Nybegynder
19. juni 2001 - 17:24 #2
Ja, det gav mening, men jeg har lige fundet ud af at jeg kan også gøre dette uden brug af new, men hvad er forskellen?

Person p(\"Skipper\", 26);   
p.setAlder(27);
cout << p.getNavn() << \" er \" << p.getAlder() << \" år\"<< endl;
Avatar billede henrik_ffc Nybegynder
19. juni 2001 - 17:35 #3
Der er i princippet ingen forskel, da du i begge tilfælde kalder constructoren.
Men new er nemmere at arbejde med (synes jeg i hvertfald), specielt når du skal generere
objekter dynamisk
Avatar billede mickni33 Nybegynder
19. juni 2001 - 18:36 #4
Efter min mening er der ingen grund til at bruger pointer objekter med mindre man arbejder med
\' virtual funktioner \' dvs når man arbejder med arv og polymofi. Lær at arbejde med admindelige først når du så har fået lidt rutine kan du så bruge pointer objekter som er rigtig smart, da man istedet for at oprette 4 forskellige objekter bare kan nøjes med at oprette en new pointer og sætte den til at pege på den klasse som der skal oprettes ob jekt af...... Nu syntes jeg at det kom lidt langt ud :) men start med at få rutinen med admindelige objekter.
Avatar billede kamikaze Nybegynder
19. juni 2001 - 18:41 #5
irsild >> Der er en forskel... I dit andet forsøg er det ikke en pointer du opretter, men en instans (p) af Person.
Avatar billede wisen Nybegynder
20. juni 2001 - 08:47 #6
...der er også den forskel en du selv skal huske at fjerne objekter (med delete) du har allokeret med \"new\" (på heap\'en), mens objekter du har lavet på stakken automatisk bliver nedlagt når de går ud af scope. Giver det mening ?

tegnet \"->\" kan faktisk erstattes af \"*.\" Du kalder altså en funktion på en pointer, og det kan selvfølgelig kun lade sig gøre hvis du har fat i et objekt der er allokeret med \"new\".

/wisen
Avatar billede irsild Nybegynder
21. juni 2001 - 22:43 #7
mickni33(eller en anden) >> Hvorfor er det kun når man arbejder med  \'arv/polymofi\', at man skal bruge pointer?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester