bcorny Skrevet 25. mars 2002 Del Skrevet 25. mars 2002 Noen som vet hvordan man returnerer en tabell fra en metode? Må en bruke peker eller referanse til tabellen? Tar gjerne imot noen eksempler på hvordan dette kan gjøres, og linker :smile: [ Denne Melding var redigert av: bcorny på 2002-03-25 15:16 ] Lenke til kommentar
DrDoogie Skrevet 25. mars 2002 Del Skrevet 25. mars 2002 Peker er greit aa bruke naar du har mer data enn pekeren utgjoer ja. Lenke til kommentar
Razul Skrevet 25. mars 2002 Del Skrevet 25. mars 2002 Dersom du har oppretta tabellen inni metoden, må du returnere en peker (som må slettes manuelt seinere). Du kan ikke bruke referanse fordi denne blir sletta når metoden er ferdigkjørt. Pass på at referanser forsvinner så fort den metoden eller klassen som laga dem avsluttes. Pekere derimot, blir stående helt til du sletter dem med delete. Lenke til kommentar
Gyro Skrevet 26. mars 2002 Del Skrevet 26. mars 2002 Du er helt nødt til å benytte en peker dersom du vil returnere en tabel fra en metode. En 'raw array' i C++ er egentlig en remse med byte og en av variablene( en peker ) får adressen til den første av disse bytene. Dessuten så er C++ et sterkt typet språk, så å blande pekere og referanser vil gi kompilatorfeil. Husk bare å opprette tabellen med noe slikt som 'int* i = new int[10], eller at klassedeklarasjonen inneholder noe slikt:' int i[10]. Fordelen med den siste er at du slipper å tenke på å 'delete' den, da dette skjer automatisk når objektet slettes. Lenke til kommentar
CaSh Skrevet 24. mai 2002 Del Skrevet 24. mai 2002 Tja noe riktig og noe gale svar. Her er det korrekte med programeksempel. Sett at du har en klasse class x { private: int tab[5]; public: int hentTab(); } Så er du interessert i å returnere tabellen tilbake. Vel siden en tabell allerede er en peker, så kan du ikke skrive slik int x::hentTab() { return tab;} Men du mangler et lite tegn og det er *; Her er korrekt: class x { private: int tab[5]; public: int* hentTab(); }; int* x::hentTab() { return tab; } Nå garanterer jeg at hele tabellen blir returnert. Lenke til kommentar
decibel Skrevet 8. juni 2002 Del Skrevet 8. juni 2002 Å returnere en tabell slik som over er i C++ ofte et tegn på dårlig design. Jeg vil anbefale deg å bruke STLs vector istedet: Code: #include <vector>class x{public: x(){} ~x(){} const std::vector<int>* GetVector() const { return &m_vec; }private: std::vector<int> m_vec;}; decibel Lenke til kommentar
iGGy Skrevet 19. juni 2002 Del Skrevet 19. juni 2002 Å si at det er dårlig design må jeg si meg uenig i - å bruke STL i tilfeller hvor det eneste man trenger er en static-størlse array, er overkill... Quote: Den 2002-06-08 15:55, decibel skrev:Å returnere en tabell slik som over er i C++ ofte et tegn på dårlig design. Jeg vil anbefale deg å bruke STLs vector istedet: Code: #include <vector>class x{public: x(){} ~x(){} const std::vector<int>* GetVector() const { return &m_vec; }private: std::vector<int> m_vec;}; decibel Lenke til kommentar
decibel Skrevet 20. juni 2002 Del Skrevet 20. juni 2002 Quote: Den 2002-06-19 09:44, iGGy skrev:Å si at det er dårlig design må jeg si meg uenig i - å bruke STL i tilfeller hvor det eneste man trenger er en static-størlse array, er overkill... Jeg skrev heller ikke det. Jeg skrev: "OFTE et tegn på dårlig design". Du kan dessuten spesifisere størrelsen på en vector i c'tor. Ellers er som kjent innholdet i en vector garantert å være en sammenhengende minneblokk... Uansett vil jeg si at å returnere arrays som i tidligere post bør for enhver pris unngås i C++ (C blir noe helt annet). Lenke til kommentar
CaSh Skrevet 24. juni 2002 Del Skrevet 24. juni 2002 Hvorfor skal det unngås? Jeg har mange ganger hatt nytten av å returnere en tabell, selv om jeg har brukt Vector eller list, map osv, har det ikke alltid vært gunstig å lage en slik type tabell. Dessuten svarte jeg kun på det fyren spurte om :> Lenke til kommentar
rune420 Skrevet 24. juni 2002 Del Skrevet 24. juni 2002 Som regel er det bedre å sende en peker til tabellen som fylles ut av funksjonen, en at funksjonen returnerer tabellen. Lenke til kommentar
decibel Skrevet 26. juni 2002 Del Skrevet 26. juni 2002 Quote: Den 2002-06-24 18:16, CaSh skrev:Hvorfor skal det unngås? Jeg har mange ganger hatt nytten av å returnere en tabell, selv om jeg har brukt Vector eller list, map osv, har det ikke alltid vært gunstig å lage en slik type tabell. Dessuten svarte jeg kun på det fyren spurte om :> Det var ikke ment som noe kritikk til svaret ditt. Jeg ønsket bare å informere om muligheten til å bruke et sikrere alternativ. Det er den viktigste årsaken til å bruke std::vector. Dessuten er den enklerere å bruke. Du har mye mer muligheter. Men som du sa (og som jeg bemerket i innleggene mine), noen ganger er det mer hensiktsmessig å bruke en ordinær tabell. Men som hovedregel bør det unngås, det håper jeg du er enig i :smile: Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå