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 408 — #446<br />

✐<br />

Capítulo 14. Her<strong>en</strong>cia y Composición<br />

X x;<br />

int i(100); // Applied to ordinary definition<br />

int* ip = new int(47);<br />

} ///:~<br />

El propósito de esta "pseudo-llamadas a los constructores" es una simple asignación.<br />

Es una técnica recom<strong>en</strong>dada y un bu<strong>en</strong> estilo de programación, que usted verá<br />

usar a m<strong>en</strong>udo.<br />

ncluso es posible utilizar esta sintaxis cuando se crean variables de tipos predefinidos<br />

fuera de la clase:<br />

int i(100);<br />

int* ip = new int(47);<br />

De esta forma, los tipos predefinidos actúan, más o m<strong>en</strong>os, como los objetos. Sin<br />

embargo, recuerde que no son constructores reales. En particular, si usted no realiza<br />

una llamada explícita al constructor, no se ejecutará ninguna inicialización.<br />

14.3.3. Combinación de composición y her<strong>en</strong>cia<br />

Por supuesto, usted puede usar la composición y la her<strong>en</strong>cia a la vez. El sigui<strong>en</strong>te<br />

ejemplo muestra la creación de una clase más compleja utilizando composición y<br />

her<strong>en</strong>cia.<br />

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

// Inheritance & composition<br />

class A {<br />

int i;<br />

public:<br />

A(int ii) : i(ii) {}<br />

~A() {}<br />

void f() const {}<br />

};<br />

class B {<br />

int i;<br />

public:<br />

B(int ii) : i(ii) {}<br />

~B() {}<br />

void f() const {}<br />

};<br />

class C : public B {<br />

A a;<br />

public:<br />

C(int ii) : B(ii), a(ii) {}<br />

~C() {} // Calls ~A() and ~B()<br />

}<br />

};<br />

void f() const {<br />

a.f();<br />

B::f();<br />

// Redefinition<br />

408<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!