Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
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