Seuraava esimerkki näyttää miten referenssin (viitteen) palauttamista voitaisiin käyttää "turvallisen" taulukon tekemiseen.
/* RETREF.CPP - referenssin palauttaminen, "turva"taulukko */ #include <stdio.h> class cTaulukko { int *t; int koko; int laiton; public: cTaulukko(int k); ~cTaulukko() { if (koko) delete [] t; } int get(int i) const { if ( ( i < 0 ) || ( koko <= i ) ) return laiton; return t[i]; } int &put(int i) { if ( ( i < 0 ) || ( koko <= i ) ) { printf("Laiton taulukon indeksi %d!\n",i); return laiton; } return t[i]; // Palautetaan viittaus t[i]:hin! } void tulosta() const; }; void cTaulukko::tulosta() const { for (int i=0; i<koko; i++) printf("%5d",t[i]); printf("\n"); } cTaulukko::cTaulukko(int k) { koko = 0; laiton = 0; if ( k <= 0 ) return; t = new int[k]; if ( !t ) return; koko = k; for (int i=0; i<=koko; i++) t[i] = 0; } int main(void) { cTaulukko a(5); a.tulosta(); a.put(2) = 5; // HUOM! Muoto a.put(2,5) olisi parempi! a.put(4) = 3; a.tulosta(); a.put(9) = 7; a.tulosta(); return 0; }Vielä enemmän taulukon näköinen "olio" saadaan lisämäärittelemällä luokalle []-operaattori:
/* RETREF2.CPP - referenssin palauttaminen, "turva"taulukko */ ... class cTaulukko { ... public: ... int &operator[] (int i) { if ( (i<0) || (i>=koko) ) { printf("Laiton taulukon indeksi %d!\n",i); return laiton; } return t[i]; // Palautetaan viittaus t[i]:hin! } ... }; int main(void) { cTaulukko a(5); a.tulosta(); a[3] = 3; a.tulosta(); printf("a[1] = %d\n",a[1]); a[8] = 175; a.tulosta(); printf("a[8] = %d\n",a[8]); return 0; }