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 411 — #449<br />

✐<br />

14.4. Ocultación de nombres<br />

asumir que el subobjeto de la clase base esta todavía disponible para su uso, y ha<br />

sido construido - o no se ha destruido todavía).<br />

También es interesante que el ord<strong>en</strong> de las llamadas al constructor para los objetos<br />

miembro no afect<strong>en</strong> para nada el ord<strong>en</strong> de las llamadas <strong>en</strong> la lista de inicializadores<br />

de un constructor. El ord<strong>en</strong> es determinado por el ord<strong>en</strong> <strong>en</strong> que los objetos<br />

miembros son declarados <strong>en</strong> la clase. Si usted pudiera cambiar el ord<strong>en</strong> del constructor<br />

<strong>en</strong> la lista de inicializadores de un constructor, usted podría t<strong>en</strong>er dos secu<strong>en</strong>cias<br />

difer<strong>en</strong>tes de llamada <strong>en</strong> dos constructores difer<strong>en</strong>tes, pero el destructor no sabría<br />

como invertir el ord<strong>en</strong> para llamarse correctam<strong>en</strong>te y nos <strong>en</strong>contraríamos con problemas<br />

de dep<strong>en</strong>d<strong>en</strong>cias.<br />

14.4. Ocultación de nombres<br />

Si se ha heredado de una clase y se proporciona una nueva definición para alguna<br />

de sus funciones miembros, exist<strong>en</strong> dos posibilidades. La primera es proporcionar<br />

los mismos argum<strong>en</strong>tos y el mismo tipo de retorno <strong>en</strong> la definición de la clase derivada<br />

como la clase base. Esto es conocido como redefinición para funciones miembro<br />

ordinarias y sobrecarga, cuando la función miembro de la clase es una función virtual<br />

(las funciones virtuales son un caso normal y serán tratadas <strong>en</strong> detalle <strong>en</strong> el capítulo<br />

15). Pero ¿qué ocurre cuando se modifican los argum<strong>en</strong>tos de la función miembro o<br />

el tipo de retorno <strong>en</strong> una clase derivada Aquí esta un ejemplo:<br />

//: C14:NameHiding.cpp<br />

// Hiding overloaded names during inheritance<br />

#include <br />

#include <br />

using namespace std;<br />

class Base {<br />

public:<br />

int f() const {<br />

cout

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

Saved successfully!

Ooh no, something went wrong!