Ver Mensaje Individual
  #4 (permalink)  
Antiguo 11/04/2015, 02:44
Avatar de vangodp
vangodp
 
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 1 mes
Puntos: 38
Respuesta: Tengo una duda con los punteros en los atributos

Código C++:
Ver original
  1. #include <iostream>
  2.  
  3. class Animal { //clase que va heredar todos animales
  4.     public:
  5.         // Solo poner metodos comunes entre todos animales, por ejemplo no todos animales saben ladrar, asi que ladrar no va aqui, pero todo animal tiene peso, id, nombre...
  6.         void setNombre ( std::string nombre ) { this->nombre = nombre; } //se usa para dar nombre al animal
  7.         std::string getNombre () const { return nombre; }   //se usa para obtener nombre del animal
  8.         void setId ( int *id ) { this->id = id; } //se usa para apuntar a un id que relacionaremos al animal animal
  9.         int *getId() const { return this->id; }  //se usa para obtener un id relacionado al animal
  10.        
  11.     private:
  12.    
  13.     protected:
  14.         int *id;
  15.         int annoNac;
  16.         double tamanio;
  17.         double peso;
  18.         std::string nombre;
  19. };
  20.  
  21. class Perro: public Animal {  //perro tiene todos los miembros de Animal. Se puede decir que perro es un animal =)
  22.     public:
  23.         //Los perros pueden ladrar asi que aqui si ponemos ladrar
  24.         std::string comunicar() { return "uau uau!"; }
  25.     private:
  26.    
  27. };
  28.  
  29. int main () {
  30.     //Esto es para crear un solo perro
  31.     Perro unPerro;
  32.     //puntero
  33.     int id = 47062; //numero que representa el id del perro...Perro apuntará ese entero que será su ID
  34.     unPerro.setId ( &id ); //hacemos que perro apunte el id... No hay sentido ya que el propio Animal deberia albergar el ID, pero es solo un ejemplo de como debe hacer con punteros.
  35.     unPerro.setNombre ( "Toby" );
  36.     std::cout << "Tengo un perro que se llama " << unPerro.getNombre() << " Y sabe decir: " << unPerro.comunicar() << std::endl;
  37.     std::cout << "El ID de "<< unPerro.getNombre() <<  " es: " << *unPerro.getId() << std::endl;
  38.    
  39.     //Esto seria para crear a muchos perros
  40.     Perro *ptrPerro = new Perro[10];
  41.     // Se verifica que exista el apunte a algo
  42.     if ( !ptrPerro ){ std::cout << "Error en la asignacion" << std::endl; return 1; }
  43.    
  44.     //si llegamos aqui es que tenemos el arreglo de perros, nombramos al primer perro
  45.     ptrPerro[0].setNombre("Chicho");
  46.     std::cout << "\nEl nombre del primer perro del arreglo es: " << ptrPerro[0].getNombre() << std::endl;
  47.    
  48.     //destruimos el array de perros
  49.     delete [] ptrPerro;
  50.     std::cin.ignore();
  51.     return 0;
  52. }

A ver... aquí hay todo lo que buscas creo. Solo adapta a lo que buscas y intenta entenderlo.

no necesitas instanciar la clase animal. Perro debe heredar de animal o bien debes crear un objeto Animal dentro de perro.

No tengo mucha practica con clases tampoco pero bueno XD.. Suerte