[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