[C++] sortowanie, problem z wyświetlaniem

0

Napisałem program z dziedziczeniem funkcji, mam problem, gdy dodaje obiekty do kolejki, chce je wyświetlić posortowane, na podstawie spalania pojazdów, wykomentowane jest wyświetlanie, mógłby ktoś zajrzeć w ten kod?

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <list>

using namespace std;

class pojazd{
      protected:
             double spal;
      public:
             virtual void spalanie (){}
             virtual ~pojazd(){}
             
             virtual void przypisz(const double &p1, const double &p2){}
             virtual void nazwa1(){}
             
             friend bool operator < (const pojazd & P1, const pojazd & P2)
             {
                    return (P1.spal < P2.spal);
             }
      };
             
class motor: public pojazd{
             double pojemnosc;
             double waga;
      public:
             motor(){}
             motor(const double &poj, const double &wag){pojemnosc = poj; waga = wag;}
             ~motor(){}
             
             void spalanie()
             {
                  spal = (waga + pojemnosc)/60;
             }
             
             void nazwa()
             {
                  cout<<" - MOTOR ->"<<spal<<endl;
             }
  
             virtual void przypisz(const double &p1, const double &p2)
             {
	       pojemnosc = p1;
	       waga = p2;
	     }
      };
             
class samochod: public pojazd{
             double cena;
             double v_max;
      public:
             samochod(){}
             samochod(const double &V, const double &C){cena = C; v_max = V;}
             ~samochod(){}
             
             void spalanie()
             {
                  spal = cena/v_max/30;
             }
             
             void nazwa()
             {
                  cout<<" - SAMOCHOD ->"<<spal<<endl;
             }
  
             virtual void przypisz(const double &p1, const double &p2)
             {
	       cena = p1;
	       v_max = p2;
	     }
      };
      
class samolot: public pojazd{
             double ladownosc;
             double przyspieszenie;
      public: 
              samolot(){}
             samolot(const double &lad, const double &przysp){ladownosc = lad; przyspieszenie = przysp;}
             ~samolot(){}
              
             void spalanie()
             {
                  spal = (ladownosc * 500)/przyspieszenie;    
             }
             
             void nazwa()
             {
                  cout<<" - SAMOLOT ->"<<spal<<endl;
             }

             virtual void przypisz(const double &p1, const double &p2)
             {
	       ladownosc = p1;
	       przyspieszenie = p2;
	     }             
      };
           
           
void MENU()
{
     cout <<"..::MENU::.."<<endl;
     cout <<"1 - Dodaj obiekt"<<endl;
     cout <<"2 - Posortuj obiekty"<<endl;
     cout <<"3 - Pokaz wyniki sortowania"<<endl;
     cout <<"(opcja)-> ";
}  
int main (void)
{
    int ktory,i;
    double param1, param2;
    
    list<pojazd*> cos;
    motor *moto;
    samochod *car;
    samolot *plane;
    
    
    int opcja;
    
    MENU();
    cin >>opcja;
    while(opcja!=0)
    {
                     switch(opcja)
                     {
                                  case 1 :
                                       cout <<"Ktory obiekt :\n 1 - motor \n 2 - samochod \n 3 - samolot "<<endl;
                                       cin >>ktory;
                                       if (ktory == 1)
                                          {
					    moto = new motor;
                                                 cout <<"Podaj pojemnosc -> ";
                                                 cin >>param1;
                                                 cout <<"Podaj mase -> ";
                                                 cin >>param2;
                                                 moto->przypisz(param1,param2);
                                                 moto->spalanie();
                                                 cos.push_back(moto);       
                                          }
                                       else if (ktory == 2)
                                          {
					    car = new samochod;
                                                 cout <<"Podaj cene -> ";
                                                 cin >>param1;
                                                 cout <<"Podaj predkosc max -> ";
                                                 cin >>param2;
                                                 car->przypisz(param1,param2);
                                                 car->spalanie();
                                                 cos.push_back(car);       
                                          }
                                       else if (ktory == 3)
                                          {
					    plane = new samolot;
                                                 cout <<"Podaj ladownosc -> ";
                                                 cin >>param1;
                                                 cout <<"Podaj przyspieszenie -> ";
                                                 cin >>param2;
                                                 plane->przypisz(param1,param2);
                                                 plane->spalanie();
                                                 cos.push_back(plane);       
                                          }
                                       break;
                                       
                                  case 2 :
                                      cos.sort();
                                       break;
                                       
                                  case 3 :
                                       cout <<"Kazdy pojazd pali odpowiednio (od najmniejszego do najwiekszego): "<<endl;
                                       
				       //list<pojazd*>::iterator Iter = cos.begin();
                                   //    for(;Iter != cos.end(); Iter++)
				                    //   Iter->spalanie();
                                       
				       break;
                                  
                                  case 0 :
				    
				        break;

                                  default :
                                          cout <<"Nie ma takiej opcji!!!"<<endl;
                                          break;
                     }
		     MENU();
		     cin >>opcja;
    }
    getchar();
return 0;
}
0

Ja bym stawiał na to, że sort() nie działa poprawnie dlatego, że zmienna "cos" jest typu list<pojazd*>, czyli przechowuje wskaźniki na pojazd, które - de facto - sortować się da, tak więc sortowanie tej listy odbywa się według wartości wskaźników, a nie według przeciążonego przez Ciebie operatora porównania.

Jedyne co mi przychodzi do głowy to zamiana deklaracji tej zmiennej na taką, żeby przyjmowała kopie tych obiektów, czyli

list<pojazd> cos;

A następnie dodawanie kolejnych elementów tej listy poprzez

moto = new motor;
// bla, bla, bla...
cos.push_back(*moto);

Głowy jednak nie dam, że to będzie działać, bo funkcji sort() z tej klasy nigdy nie używałem.</url>

1 użytkowników online, w tym zalogowanych: 0, gości: 1