[C con Clase] Algo explícito e implícito en C o C++
Samuel Porras
samuelporras en gmail.com
Vie Mar 13 01:08:58 CET 2009
Muchas Grácias Steven ahora me ha quedado mas claro.
Un cordial saludo.
Steven Davidson escribió:
> Hola Samuel,
>
> Samuel Porras wrote:
>> Buenas noches,
>> en muchas ocasiones, he leído por la lista y en los libros/manuales
>> hacer algo explicito y no consigo entender a que se refiere,
>> por ejemplo, se dice:
>> - un valor puede ser convertido solo a un valor inferior,
>> asignando de manera explícita el valor a una variable de tipo menor
>> inferior.
>>
>> He mirado algunos sinónimos pero no me aclaran la forma de asignar de
>> esa manera:
>> Explícito: Claro, manifiesto, expreso, categórico, evidente,
>> rotundo, tajante, meridiano, sincero, franco.
>>
>> y tampoco por los antónimos:
>> Implícito, tácito, oscuro.
>>
>> Al buscar por el google, me ha salido algo sobre Visual Basic en la
>> página de msdn (Tampoco se VisualBasic pero por probar):
>> Declaración explícita e implícita.
>>
>> pero tampoco me resuelve la duda, espero que me podáis poner algunos
>> ejemplos de asignaciones, declaraciones, explícitas e implícitas para
>> que me queden un poco mas claros esos conceptos.
>>
>
> Las palabras "explícito" e "implícito" no tienen unas definiciones
> especiales en la informática. Cuando hablamos de formas, maneras,
> expresiones, escritos implícitos, estamos diciendo que no hace falta
> que los escribamos porque se sobreentiende y quedan incluidos en otra
> expresión o escrito. Con formas explícitas, sí hay que escribirlas
> claramente para hacerse entender. Podríamos decir que "explícito" es
> sinónimo de "directo" mientras que "implícito" es "indirecto". Por
> ejemplo,
>
> double exp( double base, long int exponente );
>
> int main()
> {
> long double fNum = 1.3;
> short int nExp = 100;
>
> long double fRes = exp( (double)fNum, nExp );
> ...
> }
>
> Aquí diríamos que al invocar 'exp()', tenemos que realizar un cásting
> explícito para 'fNum' de 'long double' a 'double'. Para el segundo
> parámetro, 'nExp', el cásting de 'short int' a 'long int' es
> implícito. Esto quiere decir que no hace falta que escribamos el
> cásting; C++ y el compilador sobreentienden que el cásting existe y
> que se debe realizar.
>
> Te doy otro ejemplo con clases:
>
> class Cadena
> {
> private:
> char *ptr;
>
> public:
> Cadena( const char *pszCadena );
> Cadena( const Cadena &ref );
> ~Cadena();
>
> bool igual( const Cadena &ref );
> ...
> };
>
> int main()
> {
> Cadena cad( "hola" );
>
> if( cad.igual( "Hola" ) )
> cout << "son iguales" << endl;
> else
> cout << "no son iguales" << endl;
>
> return 0;
> }
>
> Aquí tenemos varias instanciaciones e invocaciones implícitas y
> algunas explícitas. Declaramos e instanciamos explícitamente el objeto
> 'cad', lo cual implica que se invoca su constructor implícita y
> automáticamente. En la condición posterior, mientras invocamos
> explícitamente la función miembro 'igual()', instanciamos
> implícitamente un objeto temporal invocando el constructor de 'Cadena'
> implícitamente. Al finalizar la evaluación de la expresión condicional
> de la sentencia 'if', destruimos implícitamente el objeto temporal que
> previamos creamos. Esta destrucción implícita implica invocar
> implícitamente su destructor. Al terminar 'main()', destruimos el
> objeto 'cad' implícitamente lo cual implica invocar implícitamente su
> destructor.
>
>
> Espero haber aclarado el asunto.
>
> Steven
>
>
> _______________________________________________
> 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
>
Más información sobre la lista de distribución Cconclase