[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