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 243 — #281<br />

✐<br />

8.4. Clases<br />

no sean const por defecto resulta desafortunado). Un método que no modifica ningún<br />

atributo se debería escribir como constante y así se podría usar desde objetos<br />

constantes.<br />

Aquí se muestra un ejemplo que compara métodos const y métodos ordinarios:<br />

//: C08:Quoter.cpp<br />

// Random quote selection<br />

#include <br />

#include // Random number g<strong>en</strong>erator<br />

#include // To seed random g<strong>en</strong>erator<br />

using namespace std;<br />

class Quoter {<br />

int lastquote;<br />

public:<br />

Quoter();<br />

int lastQuote() const;<br />

const char* quote();<br />

};<br />

Quoter::Quoter(){<br />

lastquote = -1;<br />

srand(time(0)); // Seed random number g<strong>en</strong>erator<br />

}<br />

int Quoter::lastQuote() const {<br />

return lastquote;<br />

}<br />

const char* Quoter::quote() {<br />

static const char* quotes[] = {<br />

"Are we having fun yet",<br />

"Doctors always know best",<br />

"Is it ... Atomic",<br />

"Fear is obsc<strong>en</strong>e",<br />

"There is no sci<strong>en</strong>tific evid<strong>en</strong>ce "<br />

"to support the idea "<br />

"that life is serious",<br />

"Things that make us happy, make us wise",<br />

};<br />

const int qsize = sizeof quotes/sizeof *quotes;<br />

int qnum = rand() % qsize;<br />

while(lastquote >= 0 && qnum == lastquote)<br />

qnum = rand() % qsize;<br />

return quotes[lastquote = qnum];<br />

}<br />

int main() {<br />

Quoter q;<br />

const Quoter cq;<br />

cq.lastQuote(); // OK<br />

//! cq.quote(); // Not OK; non const function<br />

for(int i = 0; i < 20; i++)<br />

cout

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

Saved successfully!

Ooh no, something went wrong!