[C con Clase] Pequeñas dudas sobre capítulos 2, 6 y 8

Programante programante en gmail.com
Jue Abr 3 22:19:12 CEST 2008


David Reza escribió:
> Hola a todos, no había tenido tiempo de seguir con el curso pero aquí 
> estoy con más dudas sobre él.
>
> - En el capítulo 2, Tipo "enum" o enumerado, dice:
>
>     Este tipo nos permite definir conjuntos de constantes, normalmente
>     de tipo int, llamados datos de tipo enumerado. Las variables
>     declaradas de este tipo sólo podrán tomar valores entre los definidos.
>
>
> Mi duda es en lo que respecta a la parte de "normalmente de tipo int". 
> Eso quiere decir que también sirve para definir conjuntos de 
> constantes de otro tipo o simplemente es sólo para el tipo int?
Tú defines constantes, que son un tipo completamente nuevo. Cuando 
tienes enum Colores { Rojo, Verde, Azul }; estás creando un nuevo tipo. 
Los colores son Rojo, Verde y Azul. No 2 ó 5.
Sin embargo de forma interna, el compilador lo convierte en enteros 
porque es más fácil trabajar con ellos.

> - En el capítulo 6, Cómo se declaran las variables dice:
>
>     En C, contrariamente a lo que sucede con otros lenguajes de
>     programación, las variables no inicializadas tienen un valor
>     indeterminado, contienen lo que normalmente se denomina "basura",
>     también en esto hay excepciones como veremos más adelante.
>
>
> Ésto también se aplica para C++?
En C++ una clase puede estar autoinicializada por el contructor por 
defecto. No obstante en los tipos predefinidos ocurre lo mismo que en C, 
pueden tener cualquier cosa (aunque tal vez varái de un compilador a 
otro). Si quieres que tenga un valor, inicialízalo siempre. En lugar de 
hacer int Variable; haces int Variable=0;

>
> - En el capítulo 8 dice:
>
>     La asignación directa sólo está permitida cuando se hace junto con
>     la declaración. Por ejemplo:
>
>     char Saludo[5]; 
>     Saludo = "HOLA" 
>
>     Producirá un error en el compilador, ya que una cadena definida de
>     este modo se considera una constante, como veremos en el capítulo
>     de "arrays" o arreglos.
>
>
> Por qué una cadena definida de esa forma se considera  una constante? 
> En el capítulo de arreglos no veo que explique algo.
>
> Saludos y gracias de antemano por su ayuda.
Porque estás intentando asignar un puntero, cuando es un array estático. 
Cuando trabajas con Saludo es como si tuvieras un const char* a 5 
posiciones de memoria. Y a un const char* no se le puede cambiar la 
dirección, que es lo que haces al intentar asignarle "HOLA". Si lo que 
quieres es poner "HOLA" en esas 5 posiciones tendrías que hacer:
Saludo[0] = 'H';
Saludo[1] = 'O';
Saludo[2] = 'L';
Saludo[3] = 'A';
Saludo[4] = '\0';

O usando una función de string.h, strcpy(Saludo, "HOLA");





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