[C con Clase] Otra duda

Miguel Alejandro Jimenez Ramirez cerberbero en gmail.com
Jue Mar 13 16:59:57 CET 2014


OK la verdad si es mucha mas claro de esta forma , y asi tambien comprendo
la utilizacion de la palabra reservada auto.
Muchas gracias por la alclaracion me ha servido de mucho.

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.

La duda esta vez es la siguiente:
Si me piden enviar un valor por referencia , yo entendia que era la
referencia en memoria del objeto , es decir la direccion.

Por eso si tengo una funcion asi:
class A
{
public:

tipo funcion(){return val;}

private:

tipo val;
}
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?

por que he intentado hacer algo asi :

tipo funcion(){return & val;}

No funciona por que lo que la funcion espera es un valor de tipo : tipo
entonces hice esto otro:

tipo &funcion(){ return & val; }

tampoco me funciona , entonces no sabria como hacerlo , gracias por la ayuda


2014-03-13 16:44 GMT+01:00 Salvador Pozo <salvador en conclase.net>:

> Hola, de nuevo:
>
> Estoy intentando averiguar el objeto del código del mensaje anterior, pero
> me pierdo en esta función:
>
>     void almacenar(A test,int n){
>         while(n=!1){
>             A *test=new A;
>             v.push_back(*list);*
>             delete test;
>         }
>     }
>
> 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.
>
> De todos modos, no usas "test" en ningún lugar, salvo para crear el objeto
> y destruirlo.
>
> Introduces en un vector "v", que no ha sido declarado, un valor que
> extraes del vector list. Ignoro el objeto de esto.
>
> 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.
>
> 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".
>
> 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.
>
> Así pues, estabas accediendo correctamente a los elementos de la lista. El
> error estaba en el bucle:
>
> ----8<------
> #include <iostream>
> #include <vector>
>
> using namespace std;
>
> class A {
>   public:
>     string getA() const {return a;}
>     void ver(){cout<<"la palabra es : "<<getA()<<endl;}
>   private:
>     string a;
> };
>
> class B{
>   public:
>     void almacenar(A* test,int n){
>         for(int i=0; i<n; i++){
>             lista.push_back(&test[i]);
>         }
>     }
>     void imprimir(){
>         // acceder al metodo ver de la clase A
>         for(unsigned int p=1; p<lista.size();p++){
>             lista[p]-> ver();
>         }
>     }
>   private:
>     vector<A*> lista;
> };
>
> int main() {
>     A t[10];
>     B b;
>
>     b.almacenar(t,10);
>     b.imprimir();
> }
> ----8<------
>
> MAj> Bueno finalmente hice algo como esto en la funcion para leer los
> datos:
> MAj> for(auto &p : list){
> MAj> p->ver();
>
> Esta opción funciona usando un compilador que adminta C++11.
>
> 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.
>
> 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.
>
> Hasta pronto.
>
> --
> Salvador Pozo (Administrador)
> mailto:salvador en conclase.net
> Blog con Clase: http://blogconclase.wordpress.com
> Con Clase: http://conclase.net
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>



-- 
MIGUEL ALEJANDRO JIMENEZ R.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20140313/5640550f/attachment.html>


Más información sobre la lista de distribución Cconclase