<div dir="ltr"><div><div><div><div><div><div><div><div>OK la verdad si es mucha mas claro de esta forma , y asi tambien comprendo la utilizacion de la palabra reservada auto.<br></div>Muchas gracias por la alclaracion me ha servido de mucho.<br>
<br></div>Pero sin embargo tengo una duda y aporvecho este mensaje ara preguntarla. Que pena si soy molesto pero es que estoy trabajando fuertemente en unos programas en C++ y precisamente estoy utilizando C++11.<br><br></div>
La duda esta vez es la siguiente:<br></div>Si me piden enviar un valor por referencia , yo entendia que era la referencia en memoria del objeto , es decir la direccion.<br><br></div>Por eso si tengo una funcion asi:<br></div>
<div>class A<br>{<br></div><div>public:<br><br>tipo funcion(){return val;}<br><br>private:<br></div></div></div><div><div><br>tipo val;<br></div><div>}<br></div><div>Ella me va a retornar el valor de tipo , pero por valor , pero como hago si lo que quiero es retornar tipo pero por referencia?<br>
<br></div><div>por que he intentado hacer algo asi :<br><br>tipo funcion(){return & val;}<br></div><div><br>No funciona por que lo que la funcion espera es un valor de tipo : tipo<br></div><div>entonces hice esto otro:<br>
<br>tipo &funcion(){ return & val; }<br><br></div><div>tampoco me funciona , entonces no sabria como hacerlo , gracias por la ayuda<br></div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2014-03-13 16:44 GMT+01:00 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, de nuevo:<br>
<br>
Estoy intentando averiguar el objeto del código del mensaje anterior, pero me pierdo en esta función:<br>
<div class=""><br>
    void almacenar(A test,int n){<br>
        while(n=!1){<br>
            A *test=new A;<br>
</div>            v.push_back(*list);*<br>
            delete test;<br>
        }<br>
    }<br>
<br>
Creas un objeto "test" dentro del bucle while, cuando ya existe un "test" que es el parámetro que pasas a "almacenar". Esta segunda declaración oculta la del parámetro, que queda inaccesible.<br>

<br>
De todos modos, no usas "test" en ningún lugar, salvo para crear el objeto y destruirlo.<br>
<br>
Introduces en un vector "v", que no ha sido declarado, un valor que extraes del vector list. Ignoro el objeto de esto.<br>
<br>
El bucle "while(n=!1)", no tiene sentido. Si es "while(n!=1)", hay dos posibles resultados. O bien es un bucle infinito, cuando n sea distinto de 1, o  no se ejecuta nunca, cuando n sea 1. En cualquier caso, n es un parámetro, y en ningún momento se modifica su valor.<br>

<br>
Entiendo que hay errores en este código, y el el parámetro test es un array normal de n elementos, que deben ser introducidos en el vector "list".<br>
<br>
Dicho sea de paso, usar "list" como identificador puede ser mala idea, porque es otro de los tipos definidos en stl, usaré "lista" en su lugar.<br>
<br>
Así pues, estabas accediendo correctamente a los elementos de la lista. El error estaba en el bucle:<br>
<br>
----8<------<br>
#include <iostream><br>
#include <vector><br>
<br>
using namespace std;<br>
<div class=""><br>
class A {<br>
  public:<br>
    string getA() const {return a;}<br>
    void ver(){cout<<"la palabra es : "<<getA()<<endl;}<br>
  private:<br>
    string a;<br>
};<br>
<br>
class B{<br>
  public:<br>
</div>    void almacenar(A* test,int n){<br>
        for(int i=0; i<n; i++){<br>
            lista.push_back(&test[i]);<br>
<div class="">        }<br>
    }<br>
    void imprimir(){<br>
        // acceder al metodo ver de la clase A<br>
</div>        for(unsigned int p=1; p<lista.size();p++){<br>
            lista[p]-> ver();<br>
        }<br>
    }<br>
  private:<br>
    vector<A*> lista;<br>
};<br>
<br>
int main() {<br>
    A t[10];<br>
    B b;<br>
<br>
    b.almacenar(t,10);<br>
    b.imprimir();<br>
}<br>
----8<------<br>
<br>
MAj> Bueno finalmente hice algo como esto en la funcion para leer los datos:<br>
MAj> for(auto &p : list){<br>
MAj> p->ver();<br>
<br>
Esta opción funciona usando un compilador que adminta C++11.<br>
<br>
A mi modo de ver es más elegante, y una vez que se entiende la sintaxis de "auto", más fácil de entender su funcionamiento.<br>
<br>
Añadir que este tipo de bucles for sólo funciona si la clase tiene iteradores, como es el caso de "vector" o "array". No sirve para recorrer, por ejemplo, arrays agregados normales.<br>
<div class="HOEnZb"><div class="h5"><br>
Hasta pronto.<br>
<br>
--<br>
Salvador Pozo (Administrador)<br>
mailto:<a href="mailto:salvador@conclase.net">salvador@conclase.net</a><br>
Blog con Clase: <a href="http://blogconclase.wordpress.com" target="_blank">http://blogconclase.wordpress.com</a><br>
Con Clase: <a href="http://conclase.net" target="_blank">http://conclase.net</a><br>
_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">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"><br>-- <br>MIGUEL ALEJANDRO JIMENEZ R.<br>
</div>