[C con Clase] Ayuda en C++ con constructores y destructores!!!
Steven Davidson
srd4121 en njit.edu
Vie Abr 1 00:03:59 CEST 2011
Hola Jovanny,
On 3/31/2011 2:46 PM, Jovanny wrote:
> Vaya, muchas gracias por haberme respondido y más aún por darme
> ejemplos y los capítulos sugeridos.
>
> Me ha sido de mucha ayuda, ahora leeré los capítulos y si me surge
> alguna duda se los comentaré.
>
> Quizás alguna de mis más grandes dudas respecto a este tema, es
> inicializar arreglos dentro del destructor, el compilador (Borland
Querrás decir "constructor".
> C++ 5.02) me marca errores por ello, este es el código:
>
Primeramente, no aconsejo usar este compilador, ya que no sigue la
revisión actual de C++.
Veamos el código.
> class Libreria
> {
> public:
> Libreria();
> private:
> char titulo[64];
> char autor[64];
> char editorial[64];
> }obj;
>
> Libreria :: Libreria()
> {
> titulo = "C++ Como programar":
En todo caso, sería un punto y coma (;) al final de la sentencia en
lugar de dos puntos (:).
> autor = "Deitel";
> editorial = "Prentice Hall";
> }
>
> Y esta es la duda, cuando deseo inicializar titulo, autor y
> editorial, me marca error.
>
> No sé si los inicializé correctamente o si me falta algo!!!!
Efectivamente, no inicializas estos datos miembro. Recuerda que un
constructor es una función miembro ante todo; eso sí, es un tanto especial.
La forma que has intentado dar valores iniciales a estos datos miembros
es incorrecta - irrelevantemente de que uses un constructor. El problema
es que una cadena de caracteres es un array (o vector) y éste es la
dirección de memoria del primer elemento. Un array creado puede pensarse
como un puntero constante; es decir, no puedes modificar un array. He
aquí el error que se presenta.
Lo que tienes que hacer es copiar los caracteres de la cadena literal a
cada elemento del array particular. Hacer esto explícitamente es muy
engorroso, por lo que sugiero usar la función estándar 'strcpy()',
declarada en <cstring>. Esto es,
Libreria::Libreria()
{
strcpy( titulo, "C++ Como programar" );
strcpy( autor, "Deitel" );
strcpy( editorial, "Prentice Hall" );
}
Espero haber aclarado la duda.
Steven
Más información sobre la lista de distribución Cconclase