Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: Zeigon en 20 de Enero de 2003, 07:51:24 PM

Título: cosillas de las clases (de C++ me refiero :P )
Publicado por: Zeigon en 20 de Enero de 2003, 07:51:24 PM
                                teniendo clase base y una derivada:



//clase base

class persona {

public:

  persona(char *n) {strcpy(nombre, n); }

...

protected:

  char nombre[30];

...

};



//clase derivada

class estudiante : public persona {

public:

  estudiante(char *n) : persona(n) {}

};



main() {

  estudiante yo ("Zeigon");

}



//ejemplo cogido de un libro de C++



la pregunta es: pq tengo q recibir la variable en un puntero, con recibirla en 'n' a secas, sin el * , no bastaría??

saludetes                                
Título: cosillas de las clases (de C++ me refiero :P )
Publicado por: CoLSoN2 en 20 de Enero de 2003, 08:51:47 PM
                                hmm. entonces pasarías un caráceter, no una cadena de carácteres.
Como sabrás, en C hay una cierta similitud entre arrays y punteros, por eso mismo una cadena de carácteres puede identificarse con un puntero a char. Si pasas n solamente, pasarás solo 1 carácter.                                
Título: cosillas de las clases (de C++ me refiero :P )
Publicado por: Juan Mellado en 20 de Enero de 2003, 08:53:08 PM
No, no bastaría con pasarla como 'char' a secas. Son cosas distintas.

'char' indica que el tipo de la variable es un caracter.
'char *' indica que el tipo de la variable es un puntero a un caracter.

Por decirlo de una forma simple: en una variable de tipo 'char' el valor de la variable es el caracter propiamente dicho (como 'A', 'B', ...), y con una variable de tipo 'char *' el valor de la variable es una dirección de  memoria en la que se encuentra una secuencia de caracteres (como "Juan", "Pepe", ...).

Por eso, si quieres inicializar el atributo nombre de la clase con "Zeigon" debes pasar un 'char *', porque lo que pasas NO es un único carácter, SINO la dirección de memoria en la que se encuentra la cadena "Zeigon".

Espero te ayude.
Saludos.


Nota (por si acaso): En C/C++ las cadenas de caracteres tratadas con funciones como strcpy() utilizan un 0 para indicar fin de cadena. Esto es, puedes reservar 30 bytes de memoria e inicializarla con "Pepe", con lo que sólo utilizas 4 bytes, y el quinto caracter se pone a 0.
Título: cosillas de las clases (de C++ me refiero :P )
Publicado por: Juan Mellado en 20 de Enero de 2003, 08:54:55 PM
                                oops! se me adelantaron mientras escribía  :D                                
Título: ...
Publicado por: Grugnorr en 20 de Enero de 2003, 10:20:15 PM
                                Mejor usar std:string...