Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: johnnyd77 en 2 Noviembre 2016, 23:50 pm



Título: ayuda herencia c++
Publicado por: johnnyd77 en 2 Noviembre 2016, 23:50 pm
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
  1. #ifndef SISTEMA_H_
  2. #define SISTEMA_H_
  3.  
  4. class Bus {
  5. protected:
  6.    std::vector<std::string> asientos_;
  7.    std::string tipo_;
  8.    std::string origen_;
  9.    std::string destino_;
  10.    int precio_;
  11.    int hora_;
  12. public:
  13.    Bus(std::string tipo, size_t asientos, std::string origen, std::string destino, int precio, int hora) {
  14.        for (size_t i = 0; i < asientos; i++)
  15.        {
  16.            asientos_.push_back("");
  17.        }
  18.        tipo_ = tipo;
  19.        origen_ = origen;
  20.        destino_ = destino;
  21.        precio_ = precio;
  22.        hora_ = hora;
  23.    }
  24.  
  25.    void listarAsientos() {
  26.        std::cout << "Asientos disponibles: ";
  27.        for (size_t i = 0; i < asientos_.size(); i++)
  28.        {  
  29.            if(asientos_[i].size() == 0)
  30.            {
  31.                std::cout << i+1 << " ";
  32.            }
  33.        }
  34.        std::cout << std::endl;
  35.  
  36.        std::cout << "Asientos vendidos: ";
  37.        for (size_t i = 0; i < asientos_.size(); i++)
  38.        {
  39.            if(asientos_[i].size() != 0)
  40.            {
  41.                std::cout << i+1 << ": " << asientos_[i] << std::endl;
  42.            }
  43.        }
  44.        std::cout << std::endl;
  45.    }
  46.  
  47.    bool venderAsiento(int asiento, std::string rut) {
  48.        if(asientos_[asiento-1].size() == 0) {
  49.            asientos_[asiento-1] = rut;
  50.            return true;
  51.        }
  52.        return false;
  53.    }
  54.  
  55.    void info() {
  56.        std::cout << origen_ << "\t" << destino_ << "\t" << tipo_ << "\t" << hora_;
  57.    }
  58. };
  59.  
  60.  
  61.  
  62.  
  63. class semi_cama:public Bus {
  64. public:
  65.  
  66. }
  67.  
  68.  
  69. };
  70. class Sistema {
  71. protected:
  72.    std::vector<Bus> buses_;
  73. public:
  74.    Sistema(int buses) {
  75.        buses_.reserve(buses);
  76.    }
  77.  
  78.    void agendarBus(Bus bus) {
  79.        buses_.push_back(bus);
  80.    }
  81.  
  82.    void listarAgenda() {
  83.        std::cout << "Selector\tOrigen\t\tDestino\t\tTipo\t\tHora" << std::endl;
  84.        for (size_t i = 0; i < buses_.size(); i++)
  85.        {
  86.            std::cout << i+1 << "\t\t";
  87.            buses_[i].info();
  88.            std::cout << std::endl;
  89.        }
  90.    }
  91.  
  92.    void listarBus(int bus) {
  93.        buses_[bus-1].listarAsientos();
  94.    }
  95.  
  96.    bool venderPasaje(int bus, int asiento, std::string rut) {
  97.        if (buses_[bus-1].venderAsiento(asiento, rut) == false) {
  98.            std::cerr << "El asiento ya está vendido.\n";
  99.            return false;
  100.        }
  101.        return true;
  102.    }
  103. };
  104.  
  105. #endif
  106.