Gå til innhold

avvikshåndtering på engelsk?


Anbefalte innlegg

Hei,

Spm. 1: Ser at det er noe som heter avvikshåndtering i c++, men finner ingen tutorials på det siden det er på norsk. Hva heter dette på engelsk, eller i c++-bruk?

 

Spm. 2: Hvor kan jeg finne små enkle programmer skrevet i c++ som jeg kan se på. Synes ofte det er mer lærerikt å se ting i bruk i ferdigprogram. Nå tenker jeg ikke på avvikshåndtering, men små programmer bestående av f.eks 3 filer, 1.cpp, 1.h, og main.cpp. Noen som har dette, eller vet om en greit plass?

 

:hmm:

Lenke til kommentar
Videoannonse
Annonse

1. Exceptions og exception handling

 

2.

sf.net

csourcesearch.net

 

Førstenevnte er et åpen kildekodenettverk hvor du finner ufattelig mange programmer med dertilhørende kildekode. Bare sørg for å se etter programmer skrevet i C++, for det finnes mye annet der også.

Sistenevnte er en søkemotor jeg nylig leste om, så jeg aner ikke hvor bra den er.

Endret av Nazgul
Lenke til kommentar
Har en ny en nå. Finner ikke noe om det på engelsk. Hva er operatoroverstyring på engelsk?

 

finnes det en ordbok for sånne som meg?

5259289[/snapback]

Ikke som jeg vet om, men anbefaler heller å enten skaffe en norsk bok som bruker de faktiske uttrykkene istedetfor å fornorske dem, eller å skaffe deg en engelsk bok. (accelerated C++ dersom du er ny i gamet)

 

Operator overloading, som nebrewfoz sa, er ihvertfall det du leter etter.

Endret av Nazgul
Lenke til kommentar

Takker. Jeg fortsetter her jeg. Har visst en del spørsmål i dag.

 

 class Heap {
  protected:
   virtual ~Heap();
  public:
   virtual void* allocate(size_t) = 0;
   static Heap& whatHeap(void*);
 };

 

Hva betyr &'en på siste linje: 'static Heap&....'? Har brukt den i pekere, men da foran en variabel. Er det en sammenheng, eller betyr dette noe veldig annet?

Lenke til kommentar

Ok. burde ha skjønt det egentlig.

 

Ett nytt spørsmål. Jeg har søkt litt rundt og "lært" meg pekere. Veldig mange bra tutorials om dette, men det jeg ikke finner i noen tutorials og som jeg ikke helt ser selv er; hva skal pekere brukes til? Det går jo selvfølgelig an å bruker pekere i steden for vanlige typer, men hva er poenget med å hente en verdi med en adresse, i steden for å hente en verdi direkte fra en variabel?

Lenke til kommentar

Pekere brukes ikke SÅ mye i C++ som det brukes i C, fordi I C++ har du & operatøren som gjør nesten samme nytten når du skal sende et objekt til en funksjon.

Pekere eller referanser er å foretrekke når du sender dem som argument til en funksjon, i motsetning til selve variabelen.

For det første:

// pass-by-value
void inc(int i) {
i++;
}

int x=0;
inc(x);
// Hva er verdien av x nå?
// x = 0

// pass-by-reference
void inc(int& i) {
i++;
}
int x=0;
inc(x);
// Hva er verdien av x nå?
// x = 1;


// pass-by-pointer
// pass-by-address
void inc(int* i) {
*i++;
}
int x=0;
inc(&x);
// Hva er verdien til x nå?
// x = 1

 

pass-by-value sender en kopi av verdien.

Som du ser i eksempelet over, så endrer du bare verdien til variabelen i lokalt i funksjonen, så x blir ikke endret.

 

Pass-by-reference sender en referanse til variabelen x til funksjonen.

Noe som betyr at endringer du gjør på x inne i funksjonen, er permanente, eller globale. Derfor, som i eksempelet over, blir x økt til 1 (fra 0) etter å hva vært igjennom funksjonen inc

 

Pass-by-address/pointer sender også en referanse til variabelen x til funksjonen, men denne referansen i form av en peker. Vet ikke hvor mye du kan om pekere, men du må ihvertfall dereferere den for å gjøre endringer på verdien den peker til.

Dette gjør du ved å putte * foran variabelen (se eksempel)

Dersom du ikke gjør det, så vil du bare gjøre endringer på adresseverdien.

F.eks: (Dette er litt vagt for meg også, så ikke ta dette for bare god fisk)

Si at int* x peker til adressen 0x00 I minnet så vil x etter en ++x(eller x++)-operasjon peke til 0x04 fordi størrelsen på en peker er 4 byte. Dvs at den peker til neste int i rekken. (Dersom neste verdi er en int)

 

Uansett, så må du dereferere en peker for å gjøre endringer på verdien den peker til, og dette gjør du ved *x++. Her øker verdien som x peker til med 1.

 

Håper dette var sånn ca forståelig :)

Lenke til kommentar

En annen forskjell er også at "vanlige" variabler lages på "stacken". Disse blir automatisk destruert når variablen går "out of scope", altså når den går ut av en "kropp" (f.eks. funksjonskropp). Da blir de variablene som ble opprettet inne i den "kroppen" destruert i motsatt rekkefølge av den de ble konstruert i.

 

Når man imidlertid bruker pekere, så må man allokere (sette av minne til objektet du skal lage) og deallokere (frigi det minnet du allokerte) selv. Dette kan føre til en del problemer ettersom det er litt av hvert som kan sje hvis du f.eks. derefererer en peker som ikke peker til 0 og som peker på uinitialisert minne. Hvis du glemmer å deallokere det minnet du har allokert vil du få en såkalt minnelekasje.

 

Håper det ikke ble for rotete det jeg prøvde å forklare. :)

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...