[C con Clase] Segmentation Fault a la hora de leer un archivo

Steven Davidson srd4121 en njit.edu
Lun Abr 2 20:43:56 CEST 2012


Hola Asdrúbal,

On 4/2/2012 2:11 PM, Asdrúbal Iván Suárez Rivera wrote:
>
> Excelente, he resuelto mi problema. He visto en muchos códigos fuente
> en donde existen funciones en las que se retorna una referencia. ¿A
> qué se debe esto?
>

Bueno, lo he mencionado en el correo-e anterior. Sirve para permitir 
"encadenar" invocaciones en una sola expresión. Por ejemplo,

struct color
{
   float r,g,b;
};

color &color_combinar( color &res, const color &izq, const color &der, 
float fPorcentajeIzq )
{
   res.r = izq.r * fPorcentajeIzq + der.r * (1-fPorcentajeIzq);
   res.g = izq.g * fPorcentajeIzq + der.g * (1-fPorcentajeIzq);
   res.b = izq.b * fPorcentajeIzq + der.b * (1-fPorcentajeIzq);

   return res;
}

color &color_exponencial( color &res, float fFactor )
{
   res.r *= fFactor;
   res.g *= fFactor;
   res.b *= fFactor;

   return res;
}

int main()
{
   color col = { 1, 0.5, 0 };
   color gris = { 0.5, 0.5, 0.5 };

   color res;
   if( color_exponencial( color_combinar(res,col,gris,.25), .1 ).r > col.r )
     cout << "error" << endl;

   return 0;
}

Si estas funciones no retornaren 'color &', entonces tendríamos que 
hacer cada invocación por separado. Esto es,

void color_combinar( color &res, const color &izq, const color &der, 
float fPorcentajeIzq );
void color_exponencial( color &res, float fFactor );

int main()
{
   color col = { 1, 0.5, 0 };
   color gris = { 0.5, 0.5, 0.5 };

   color res;
   color_combinar( res, col, gris, .25 );
   color_exponencial( res, .1 );

   if( res.r > col.r )
     cout << "error" << endl;

   return 0;
}

La ventaja de retornar el mismo objeto que estamso tratando, y que 
existe externamente, es que tenemos mayor flexibilidad. Podemos elegir 
invocar las funciones en una sola expresión, como en el primer ejemplo, 
o podemos elegir invocar cada función en diferentes sentencias, como en 
el segundo ejemplo. El problema de no retornar una referencia al mismo 
objeto es que sólo tenemos una opción: invocar cada función por 
separado, como en el segundo ejemplo.

> Post Data: ¿Tienen un canal IRC?
>

No; no tenemos uno. No sé si crearemos uno en el futuro o no.


Espero haber aclarado el tema.

Steven





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