Avatar billede dehdar Nybegynder
30. januar 2008 - 13:42 Der er 4 kommentarer og
1 løsning

Reference C++

Hej, findes der et eneste logisk/godt eksempel på, hvor man vælger at returnere en reference? En reference er jo ikke en varibel, men blot et alias til en anden variabel.

Grunden til jeg spørger er, at hvis man har en funktion og returnerer en reference, så vil alt indholdet af funktionen alligevel ikke eksistere udenfor dens scope bortset fra private members og dem vil vi af gode grunde aldrig lave referencer til for så kan de tilgås af andre funktioner end vores medlemsfunktioner. Så findes der eksempler eller blot et eneste eksempel på, hvor an returnerer referencer?
Avatar billede arne_v Ekspert
30. januar 2008 - 14:58 #1
Det er f.eks. standard ved overload af << til output:

ostream& operator<<(ostream& s,const class FooBar& z)
{
  ...
  return s;
}
Avatar billede dehdar Nybegynder
30. januar 2008 - 21:58 #2
Okay tak :)

Jeg har siddet og leget lidt med referencer, men jeg kan ikke helt finde ud af, hvordan man opretter en reference, som en private member og dernæst initialiserer den således, at den bliver et alias af et objekt.

Hvis det her f.eks. er mit program:

// bil.h

#pragma once
#include "motor.h"

class bil
{
public:
      bil(motor &);
private:
      motor &Ref;
};

//bil.cpp

#include "bil.h"

bil::bil(motor &x);
{
    Ref = x;
}

Det her virker selvfølgelig ikke og det skyldes vel at en reference skal initialiseres ved erklæring (defineres), men jeg kan ikke finde på andre metoder. Jo jeg har prøvet at oprettet et objekt af klassen motor i headeren (komposition) og dernæst forsøgt at definere min reference i headeren, men det vidste jeg i forvejen godt ikke virkede.

Det eneste jeg lige umiddelbart ved kan lade sig gøre er at sende &x videre til alle de andre medlemsfunktioner jeg har, hvis jeg altså opretter dem med referencer, som parametre. Det vil selvfølgelig ikke være en optimal løsning, og slet ikke hvis det kan lade sig gøre at lave en private member som reference til et objekt.
Avatar billede arne_v Ekspert
31. januar 2008 - 01:22 #3
Prøv:

bil::bil(motor &x) : Ref(x);
{
}
Avatar billede dehdar Nybegynder
31. januar 2008 - 22:32 #4
Det er utroligt så meget man lærer herinde. Gad vide om jeg nogensinde kommer til at rumme alt den viden, som åbenbart er paratviden for dig? :) Jeg beklager hvis jeg stiller for mange spørgsmål, men jeg er så interesseret i C++ programmering at jeg ofte sidder og leger med de emner, som jeg har haft om i mine prg klasser og dertil opstår der så en masse spørgsmål :)

bil::bil(motor &x) : Ref(x)

Ved at skrive ": Ref(x)" så smidder du indholdet af "(motor &x)" over i x, altså kan man initialisere sine medlemsværdier explicit ligesom man gør ved f.eks. komposition ? Det er sgu smart :)

Du må gerne ligge et svar
Avatar billede arne_v Ekspert
01. februar 2008 - 01:45 #5
svar
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