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
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.
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.
oops! se me adelantaron mientras escribía :D
Mejor usar std:string...