<div dir="ltr">Bueno pues aca estoy yo otra vez con mis dudas , esta vez es sobre un operador en especial el operador :<div><br></div><div><pre style="padding:5px;margin-top:0px;margin-bottom:0px;font-family:Consolas,Courier,monospace;overflow:auto;word-wrap:normal;color:rgb(0,0,0);font-size:13px;line-height:17px">
reinterpret_cast < type-id > ( expression ).</pre><pre style="padding:5px;margin-top:0px;margin-bottom:0px;font-family:Consolas,Courier,monospace;overflow:auto;word-wrap:normal;color:rgb(0,0,0);font-size:13px;line-height:17px">
<br></pre><pre style="padding:5px;margin-top:0px;margin-bottom:0px;font-family:Consolas,Courier,monospace;overflow:auto;word-wrap:normal;color:rgb(0,0,0);font-size:13px;line-height:17px">Por lo que entiendo este operador hace un casting y lo que hace es que transforma la expresion en el</pre>
<pre style="padding:5px;margin-top:0px;margin-bottom:0px;font-family:Consolas,Courier,monospace;overflow:auto;word-wrap:normal;color:rgb(0,0,0);font-size:13px;line-height:17px">tipo deseado.</pre><pre style="padding:5px;margin-top:0px;margin-bottom:0px;font-family:Consolas,Courier,monospace;overflow:auto;word-wrap:normal;color:rgb(0,0,0);font-size:13px;line-height:17px">
<br></pre><pre style="padding:5px;margin-top:0px;margin-bottom:0px;font-family:Consolas,Courier,monospace;overflow:auto;word-wrap:normal;color:rgb(0,0,0);font-size:13px;line-height:17px">Ahora bien , comprendido esto tengo el siguiente programa:</pre>
<pre style="padding:5px;margin-top:0px;margin-bottom:0px;font-family:Consolas,Courier,monospace;overflow:auto;word-wrap:normal;color:rgb(0,0,0);font-size:13px;line-height:17px"><br></pre></div><div><div>#include <iostream></div>
<div><br></div><div>class A</div><div>{</div><div>public:</div><div>    A() : m_i(0) { }</div><div><br></div><div>protected:</div><div>    int m_i;</div><div>};</div><div><br></div><div>class B</div><div>{</div><div>public:</div>
<div>    B() : m_d(0.0) { }</div><div><br></div><div>protected:</div><div>    double m_d;</div><div>};</div><div><br></div><div>class C</div><div>    : public A</div><div>    , public B</div><div>{</div><div>public:</div>
<div>    C() : m_c('a') { }</div><div><br></div><div>private:</div><div>    char m_c;</div><div>};</div><div><br></div><div>int main()</div><div>{</div><div>    C d;</div><div>    A *b1 = &d;</div><div>    B *b2 = &d;</div>
<div><br></div><div>    const int a = (reinterpret_cast<char*>(b1) == reinterpret_cast<char*>(&d)) ? 1 : 2;</div><div>    const int b = (b2 == &d) ? 3 : 4;</div><div>    const int c = (reinterpret_cast<char*>(b1) == reinterpret_cast<char*>(b2)) ? 5 : 6;</div>
<div><span class="" style="white-space:pre">    </span></div><div>    std::cout << a << b << c << std::endl;</div><div><span class="" style="white-space:pre">  </span>getchar();</div><div>    return 0;</div>
<div>}</div></div><div><br></div><div style>Al ejecutarlo vamos a tener 136.</div><div style><br></div><div style>El primer numero 1 , entiendo bien por que existe , ya que la condicion: reinterpret_cast<char*>(b1) == reinterpret_cast<char*>(&d)</div>
<div style>es verdadera , lo cual es logico ya que hacemos un casting de b1 y convertimos su contenido en un apuntador a char , dentro de b1 vamos a tener la referencia a d pero a lo que esta apuntando b1 es el contenido de d ,si creamos una funcion para ver su contenido  creeria que es 'c' que es valor dado en la clase c. </div>
<div style><br></div><div style>El 3 , se da por que el contendido de b2 es la referencia a la cual esta apuntando es decir la referencia d.</div><div style><br></div><div style>pero el tercero , la verdad no se por qu es falso , ya que si b1 esta apuntando a d y b2 esta apuntando a d , y los dos son padres de la clase c , no seria como llamar al mismo objeto desde diferentes clases?, bueno no se si estoy bien en mi apreciacion epro me gustaria aclarar esta duda y ademas saber si mis afirmaciones son correctas.</div>
<div style><br></div><div style>Gracias or su ayuda , cordialmente.</div><div style><br></div><div class="gmail_extra"><br><div class="gmail_quote">2013/5/20 Miguel Alejandro Jimenez Ramirez <span dir="ltr"><<a href="mailto:cerberbero@gmail.com" target="_blank">cerberbero@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Muchas gracias por la ayiuda , la verdad son de una pagina:<div><a href="http://www.interqiew.com/tests?type=cpp" target="_blank">http://www.interqiew.com/tests?type=cpp</a><br>
</div><div>Estoy preparandome para pruebas de trabajo ya que quiero trabajar como desarrollador de sistemas embebidos.</div>
<div><br></div><div>Si tienes mas informacion sobre este tema estaria muy agradecido. Y pues seguire con las preguntas , si tengo dudas las enviare. Gracias nuevamente</div></div><div class="gmail_extra"><div><div class="h5">
<br><br>
<div class="gmail_quote">2013/5/20 Salvador Pozo <span dir="ltr"><<a href="mailto:salvador@conclase.net" target="_blank">salvador@conclase.net</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Hola:<br>
<br>
Antes de nada, que sepas que no molestas en nada con tus preguntas. Pregunta todo lo que quieras.<br>
<br>
MAj> Buneo creo que lo entendi , es que no habia visto que en la parte privada<br>
MAj> de la clase derivada los objetos eran del tipo de la clase A.<br>
<br>
Yo también he tardado un rato en verlo. :)<br>
<br>
MAj> Lo que tendria que aclarar seria el orden aver si lo que digo es cohereente.<br>
MAj> Al declarar el objeto b de tipo de la clase derivada B y enviando como<br>
MAj> parametro 5. Claro esta todo en corchetes para que el comilador entienda<br>
MAj> que lo que vamos a imprimir esta en los destructores.<br>
<br>
No importa tanto el orden en que se crean como en el que se destruyen los objetos.<br>
<br>
Efectivamente, podemos suponer que primero se crean los datos correspondientes a la clase base A, de la que se deriva la clase B. Como no es necesario especificar un constructor de la clase base, puesto que tiene uno con un parámetro con un valor por defecto, esa invocación al constructor de la clase base no aparece en el constructor de B. (Espero no haber cometido errores en este párrafo). :)<br>


<br>
El constructor de B podría quedar de este modo (por lo que se refiere a este ejemplo, al menos):<br>
<br>
    B(int n) : A(2), m_x(m_i + 1) , m_a(n) {}<br>
<br>
El orden en que se crean los objetos es el mismo en que aparecen las llamadas a los constructores.<br>
<br>
Puedes probar a cambiar el orden, y verás que el orden permanece, pero obtendrás mensajes de aviso diciendo que el orden de construcción no es el mismo en que lo has escrito.<br>
<br>
Una vez construido el objeto B, los datos miembro tienen los valores siguientes:<br>
<br>
m_i (de la clase base) = 2<br>
m_x = 3<br>
m_a = 5<br>
<br>
Ahora vamos a los destructores.<br>
<br>
Cuando se invoca al destructor de B, primero se muestra el valor de m_i, ya que lo primero que hay es un cout << m_i, es decir, "2".<br>
<br>
Luego se decrementa m_i, que pasa a valer 1.<br>
<br>
Hasta aquí no hemos destruido nada todavía.<br>
<br>
Ahora es cuando se destruyen los miembros de b, primero m_x, y se muestra el valor "3", luego m_a, y se muestra el valor "5".<br>
<br>
Finalmente, se destruye la clase base A de B, y se muestra m_i, que ahora vale "1".<br>
<br>
El poner la sentencia:<br>
    { B b(5); }<br>
<br>
Entre corchetes es para que el bloque se ejecute, es decir, el objeto b se crea y al finalizar el bloque (entre corchetes), se destruye.<br>
<br>
Una pregunta: ¿de dónde sacas estos programas? Son geniales. :)<br>
<div><div><br>
<br>
--<br>
Salvador Pozo (Administrador)<br>
mailto:<a href="mailto:salvador@conclase.net" target="_blank">salvador@conclase.net</a><br>
_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div></div></div><div class="im">-- <br>MIGUEL ALEJANDRO JIMENEZ R.<br>
</div></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>MIGUEL ALEJANDRO JIMENEZ R.<br>
</div></div>