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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

✐<br />

✐<br />

✐<br />

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

✐<br />

Capítulo 7. Sobrecarga de funciones y argum<strong>en</strong>tos por defecto<br />

elem<strong>en</strong>to equivocado una vez que la unión se ha inicializado. En el ejemplo anterior,<br />

podría escribir X.read_float() incluso aunque sea inapropiado. Sin embargo,<br />

una unión «segura» se puede <strong>en</strong>capsular <strong>en</strong> una clase. En el sigui<strong>en</strong>te ejemplo,<br />

vea cómo la <strong>en</strong>umeración clarifica el código, y cómo la sobrecarga vi<strong>en</strong>e como anillo<br />

al dedo con los constructores:<br />

//: C07:SuperVar.cpp<br />

// A super-variable<br />

#include <br />

using namespace std;<br />

class SuperVar {<br />

<strong>en</strong>um {<br />

character,<br />

integer,<br />

floating_point<br />

} vartype; // Define one<br />

union { // Anonymous union<br />

char c;<br />

int i;<br />

float f;<br />

};<br />

public:<br />

SuperVar(char ch);<br />

SuperVar(int ii);<br />

SuperVar(float ff);<br />

void print();<br />

};<br />

SuperVar::SuperVar(char ch) {<br />

vartype = character;<br />

c = ch;<br />

}<br />

SuperVar::SuperVar(int ii) {<br />

vartype = integer;<br />

i = ii;<br />

}<br />

SuperVar::SuperVar(float ff) {<br />

vartype = floating_point;<br />

f = ff;<br />

}<br />

void SuperVar::print() {<br />

switch (vartype) {<br />

case character:<br />

cout

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

Saved successfully!

Ooh no, something went wrong!