Gå til innhold

returnere tabell... i c++


Anbefalte innlegg

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
Videoannonse
Annonse

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

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
  • 1 måned senere...

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
  • 3 uker senere...

Å 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
  • 2 uker senere...

Å 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

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

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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...