[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