ayuda herencia c++

Iniciado por johnnyd77, 2 Noviembre 2016, 23:50 PM

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

johnnyd77

hola, disculpen la molestia pero necesito auyda con la materia de herencia y polimorfismo (mas herencia), lo que sucede es que hice un header llamado sistema.h y debo hacer 3 clases derivadas de la clase bus (vienen siendo semi cama, premium y salon cama) . en estas clases, tienen los mismos atributos pero solo se diferencian en la capacidad que tienen (semi cama 45, premium 20 y 30 salon cama) y no se como hacer que la otra clase sistema (que es un vector de bus) diferencie cuando es salon cama, semi cama y premium .  les agradeceria mucho su ayuda


Código (cpp) [Seleccionar]

#ifndef SISTEMA_H_
#define SISTEMA_H_

class Bus {
protected:
   std::vector<std::string> asientos_;
   std::string tipo_;
   std::string origen_;
   std::string destino_;
   int precio_;
   int hora_;
public:
   Bus(std::string tipo, size_t asientos, std::string origen, std::string destino, int precio, int hora) {
       for (size_t i = 0; i < asientos; i++)
       {
           asientos_.push_back("");
       }
       tipo_ = tipo;
       origen_ = origen;
       destino_ = destino;
       precio_ = precio;
       hora_ = hora;
   }

   void listarAsientos() {
       std::cout << "Asientos disponibles: ";
       for (size_t i = 0; i < asientos_.size(); i++)
       {  
           if(asientos_[i].size() == 0)
           {
               std::cout << i+1 << " ";
           }
       }
       std::cout << std::endl;

       std::cout << "Asientos vendidos: ";
       for (size_t i = 0; i < asientos_.size(); i++)
       {
           if(asientos_[i].size() != 0)
           {
               std::cout << i+1 << ": " << asientos_[i] << std::endl;
           }
       }
       std::cout << std::endl;
   }

   bool venderAsiento(int asiento, std::string rut) {
       if(asientos_[asiento-1].size() == 0) {
           asientos_[asiento-1] = rut;
           return true;
       }
       return false;
   }

   void info() {
       std::cout << origen_ << "\t" << destino_ << "\t" << tipo_ << "\t" << hora_;
   }
};




class semi_cama:public Bus {
public:

}


};
class Sistema {
protected:
   std::vector<Bus> buses_;
public:
   Sistema(int buses) {
       buses_.reserve(buses);
   }
   
   void agendarBus(Bus bus) {
       buses_.push_back(bus);
   }
   
   void listarAgenda() {
       std::cout << "Selector\tOrigen\t\tDestino\t\tTipo\t\tHora" << std::endl;
       for (size_t i = 0; i < buses_.size(); i++)
       {
           std::cout << i+1 << "\t\t";
           buses_[i].info();
           std::cout << std::endl;
       }
   }
   
   void listarBus(int bus) {
       buses_[bus-1].listarAsientos();
   }
   
   bool venderPasaje(int bus, int asiento, std::string rut) {
       if (buses_[bus-1].venderAsiento(asiento, rut) == false) {
           std::cerr << "El asiento ya está vendido.\n";
           return false;
       }
       return true;
   }
};

#endif