Ayuda con estos constructores C++

Iniciado por ThronerAXE, 6 Febrero 2014, 22:54 PM

0 Miembros y 1 Visitante están viendo este tema.

ThronerAXE

Código (cpp) [Seleccionar]
#include <iostream.h>
#include <string.h>
class Hola
{
  private:
            char nom[20];
            int num;
  public:
            Hola();
};
Hola::Hola()
{
  strcpy(nom," ");
  num=0;
}


Código (cpp) [Seleccionar]
#include <iostream.h>
#include <string.h>
class Hola
{
  private:
            char nom[20];
            int num;
  public:
            Hola(int numero, char *nombre);
};
Hola::Hola(int numero, char *nombre)
{
  strcpy(nom,nombre);
  num=numero;
}


Buenas . queria saber si me podian aconsejar sobre como actuan estos 2 constructores, primero si estan escritos correctamente xd, luego en el segundo codigo q es con parametros aveces he visto que las variables las invierten de esta forma, esta correcto??:
Código (cpp) [Seleccionar]
strcpy(nombre,nom);
numero=num;

Yoel Alejandro

#1
Hola ThronerAXE, en cuánto al código me parece bien salvo por un pequeño detalle. Al menos en mi compilador de C++ (uso g++ de GNU para Linux) la biblioteca iostream debe ser cargada con la sentencia:

Código (cpp) [Seleccionar]

#include "iostream"


en lugar de <iostream.h>. La explicación exacta del por qué no la tengo, pero parece que iostream es más que un simple archivo de cabecera, es como varias cosas que se cargan juntas (o algo así, no se). En fin, el asunto es que en los compiladores más recientes (no así en los antiguos) hay que escribir "iostream" (sin .h)

Lo demás está bien. Ahora, en cuanto al orden de los argumentos en strcpy te explico. El prototipo de esta función es:

Código (cpp) [Seleccionar]

char * strcpy( char * destino, const char origen )


o sea, que PRIMERO va el destino, y de SEGUNDO el origen. Debe ser así, y no al revés. Entiendo que en el constructor de la clase tú desea copiar la cadena nombre a la cadena nom, por tanto debe ser, obligatoriamente:


strcpy( nom, nombre );


Por razones similares debe escribirse num = numero y no al revés. Pues, el operando a la izquierda del operador "=" es quién recibe el valor.

Ante cualquier duda sobre el orden y significado de los argumentos en una función estándar de C debes remitirte a la documentación (help) de tu compilador, a un buen libro/manual de C, o ayuda en línea por ejemplo en la excelente página c.conclase.net, y por sobre todo atender a la descripción indicada por el prototipo de la función.

Espero haberte ayudado, y cualquier cosa vuelve a preguntar ....
Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)