Avatar billede hhdsleizer Nybegynder
25. august 2002 - 16:42 Der er 9 kommentarer og
3 løsninger

return og andet!

Hej folk her på eksperten.
Jeg er begyndt på c++. Og kan ikke rigtigt forstå begrebet "return". hvorfor er der nogen gange man skal return en variabel eller lign. Og andre gange 0.

Jeg kna heller ikke forstå hvorfor der i nogle eksembler jeg har set står således når man "opretter" en funktion: int funktions(variabelnavn, variabelnavn).
Hvorfor står der variabler i funktionens parentes...

Det kan godt være at jeg er en nybegunder men jeg vil gerne have det forklaret på dansk og helst af jer og ikke bare et link.
Den der kan forklare mig de 2 ting får point.

Sleizer
Avatar billede razersedge Nybegynder
25. august 2002 - 16:56 #1
jeg kan lave et eksempel her:

hvis du skal bruge en funktion som skal ligge 2 tal sammen kunne du lave den sådan her:

int Add(int a, int b)
{
return a+b;
}

og så vil du evt kalde den med dette:

int Svaret;
Svaret = Add(5,7);

--------------

det int som er foran Add, fortæller at denne funktion returnerer en Integer(heltal), og variablerne a og b (Add(int a, int b)), er også begge integers, via dem kan du overføre 2 heltal(integers) til funktionen, funktion bliver så kaldt, og du kan tilgå de to tal som er blevet overført ved at bruge a og b i funktionen,

return a+b;

snakker lidt for sig selv, funktionen returnerer a+b, du kunne også sige:

int i;
i = a+b;
return i;

... vil give samme effekt.

Håber det var til at forstå, gik lidt hurtigt.
Avatar billede razersedge Nybegynder
25. august 2002 - 16:59 #2
variablen "Svaret" indeholder forresten 12 til sidst. (5+7)
Avatar billede razersedge Nybegynder
25. august 2002 - 17:01 #3
mht return,

hvis du har en funktion som ikke skal returnere noget, kan du deklarere den som "void" istedet for feks "int":

void SkrivTilSkaerm()
{
cout << "Skriver noget til skaermen" << endl;
}

hvilken kan kaldes med:

SkrivTilSkaerm();
Avatar billede soepro Nybegynder
26. august 2002 - 09:19 #4
Ordet 'return' anvendes helt ligefrem til at angive hvornår en given funktion skal returnere - dvs. afslutte og returnere sit resultat til den del af programmet, som aktiverede funktionen.

Som du selv har opdaget er der een datatype som en funktion kan returnere, der opfører sig anderledes end de andre - nemlig void. Hvis en funktion er deklareret med datatypen void, angiver det i C/C++ at funktionen ikke direkte returnerer en værdi.

Lad os tage det simple eksempel som ovenfor - en funktion der kan lægges to tal sammen, og returnere summen:

int addParm(int tal1, int tal2) { return tal1+tal2 };

Ordet 'int' foran funktionens navn ('addParm') angives at funktionen aflevere et resultat af typen integer, dvs. et heltal. De to variabler inden i parentesen efter funktionen navn, er såkaldte parametere, dvs. oplysninger som funktionen skal have "udefra" for at kunne løse sin opgave. Man kunne godt lave add funktionen uden hverken at overføre oplysninger eller modtage resultatet direkte:

int tal1, tal2, resultat;
void addGlobal(void) { resultat = tal1 + tal2; };

svarende til den måde andre "gamle" programmeringssprog som f.eks. COBOL virker på. Forskellen på de to, kan man se når man skal bruge funktionen:

:
  int mitAtal1 = 2, mitBtal1 = 3, mitresultat1;
  int mitBtal1 = 6, mitBtal2 = 9, mitresultat2;

  // Den funktion som får information overført, og aflevere et resultat
  mitresultat1 = addParm(mitAtal1, mitAtal2);
  mitresultat2 = addParm(mitBtal1, mitBtal2);

  // Den funktion, som anvender de globale variabler tal1, tal2 og resultat
  tal1 = mitAtal1;
  tal2 = mitAtal2;
  addGlobal();
  mitresultat1 = resultat;
  tal1 = mitBtal1;
  tal2 = mitBtal2;
  addGlobal();
  mitresultat2 = resultat;
:

Som du kan se, giver versionen med overført information og returnering af et resultat meget kortere kode, når funktionen skal anvendes. (Kortere kildetekstkode - maskinkoden er rent faktisk lidt kortere på versionen med globale variabler, fordi der ikke skal bruges "krudt" på at overføre parametrene til funktionen, loade dem i funktionen og overføre resultatet.)

Så for nu at opsummere:

Ad 1) Hvorfor return ? For at fortælle at funktionen *returnerer* et resultat
AD 2) Hvorfor variabler inde i parentesen ? For at overføre information *til* funktionen
Avatar billede tosssen Nybegynder
26. august 2002 - 10:33 #5
Man kan betragte en funktion som en maskine. De variable som står i parantesen efter funktionens navn er det, som puttes i maskinen. Når funktionen/maskinen i sin process støder ind i ordet return, stoppes funktionen og produktet/resultatet sendes ud af maskinen ved hjælp af nøgleordet return.
Det der afgør om man skal returnere en variabel eller ej er hvad der står foran funktionens navn når man opretter den.

int funktions(int variabelnavn1, int variabelnavn2)
{
    return variabelnavn1 + variabelnavn2;
}

I dit tilfælde skal du således returnere en variabel af typen int (dvs. et heltal)
Hvis du ikke ønsker at returnere nogen variabel, skal du erstatte returtypen med nøgleordet void således:

void funktions(int variabelnavn1, int variabelnavn2)
{
    return;
}

Under alle omstændigheder skal en funktion indeholde nøgleordet return, ellers er det umuligt at "stoppe maskinen" og man får således ikke noget produkt.

Som du kan se har jeg rettet lidt i din funktions prototype, som det hedder. Jeg har dels indsat et int foran hvert variabelnavn, idet man skal angive variablernes type, dels har jeg sørget for at variablerne ikke har samme navn, fordi det ikke er tilladt.

Jeg håber dette hjælper dig, nu har du i hvert fald fået nogen forskellige forklaringer ;-)
Avatar billede soepro Nybegynder
26. august 2002 - 12:13 #6
tossen >> God analogi du kommer med der - en maskine ! det må jeg huske.
Avatar billede tosssen Nybegynder
26. august 2002 - 12:25 #7
Mange tak!
Avatar billede razersedge Nybegynder
26. august 2002 - 22:26 #8
er dette noget hhdsleizer vil "returnere" på :)?
Avatar billede hhdsleizer Nybegynder
26. august 2002 - 22:59 #9
Jaja... vil bare lige se om flere kom med forklaring...
Jeg giver points til alle der er kommet med forklaring i morgen aften.

Sleizer
Avatar billede hhdsleizer Nybegynder
27. august 2002 - 19:59 #10
Tak for svarene.... jeg har givet tosssen flest point fordi det var hans svar jeg fattede mest af!!! Håber i forstår.

Sleizer
Avatar billede soepro Nybegynder
28. august 2002 - 08:40 #11
Fair nok - jeg takker !
Avatar billede razersedge Nybegynder
28. august 2002 - 20:42 #12
Ja Fair nok, havde egentligt ikke regnet med nogle point, med min lidt tågede forklaring mod tossens forklaring :)
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