13.01.2015 Views

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

✐<br />

✐<br />

✐<br />

“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 176 — #214<br />

✐<br />

Capítulo 5. Ocultar la implem<strong>en</strong>tación<br />

//: C05:NestFri<strong>en</strong>d.cpp<br />

// Nested fri<strong>en</strong>ds<br />

#include <br />

#include // memset()<br />

using namespace std;<br />

const int sz = 20;<br />

struct Holder {<br />

private:<br />

int a[sz];<br />

public:<br />

void initialize();<br />

struct Pointer;<br />

fri<strong>en</strong>d struct Pointer;<br />

struct Pointer {<br />

private:<br />

Holder* h;<br />

int* p;<br />

public:<br />

void initialize(Holder* h);<br />

// Move around in the array:<br />

void next();<br />

void previous();<br />

void top();<br />

void <strong>en</strong>d();<br />

// Access values:<br />

int read();<br />

void set(int i);<br />

};<br />

};<br />

void Holder::initialize() {<br />

memset(a, 0, sz * sizeof(int));<br />

}<br />

void Holder::Pointer::initialize(Holder* rv) {<br />

h = rv;<br />

p = rv->a;<br />

}<br />

void Holder::Pointer::next() {<br />

if(p < &(h->a[sz - 1])) p++;<br />

}<br />

void Holder::Pointer::previous() {<br />

if(p > &(h->a[0])) p--;<br />

}<br />

void Holder::Pointer::top() {<br />

p = &(h->a[0]);<br />

}<br />

void Holder::Pointer::<strong>en</strong>d() {<br />

p = &(h->a[sz - 1]);<br />

}<br />

int Holder::Pointer::read() {<br />

return *p;<br />

176<br />

✐<br />

✐<br />

✐<br />

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!