[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