30. januar 2008 - 13:42Der 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?
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.
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 :)
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.