• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dziedziczenie C++ zadanie ze studiów

Konkurs Mistrz Programowania
+1 głos
2,071 wizyt
pytanie zadane 8 stycznia 2016 w C i C++ przez PoProstuTomasz Początkujący (470 p.)

Witam mam do wykonania m.in. takie zadanie:

Problem dla mnie stanowi zmodyfikowanie funkcji w klasie pochodnej, konkretnie, jak powiększyć zużycie paliwa o 0.15, kiedy dach jest otwarty. Liczę, że ktoś z użytkowników mnie nakieruje ;)
Mój kod:
 

#include<iostream>
#include<string>
using namespace std;


class   TSamochod{

   string marka;
   double pB, pM, zP ;
  public:
   TSamochod(string , double , double , double );
   void jedz(float jakSzybko, float jakDaleko);


};

class   TKabriolet: public TSamochod{
   bool dach_otwarty;
  public:
      TKabriolet(string , double , double , double , bool dach_otwarty=false);
    bool otworz_dach(bool dach_otwarty);
    bool zamknij_dach(bool dach_otwarty );
    void jedz(float jakSzybko, float jakDaleko);
};


int main(int argc, char* argv[])
{
        TSamochod bmw("Bmw", 30, 185, 10.5);
        TKabriolet fiat("Fiat", 25, 140, 7.0);
        bmw.jedz(160,1800);
        fiat.jedz(110,1800);

        return 0;
}
//---------------------------------------------------------------------------

TSamochod::TSamochod(string m, double pB , double pM , double zP )
{
   marka=m;
   this->pB=pB;
   this->pM=pM;
   this->zP=zP;
}


 void TSamochod::jedz(float jakSzybko, float jakDaleko)
{
   if(jakSzybko>=pM)
     jakSzybko=pM;
     cout<<"Samochod pojedzie z szybkoscia: "<<jakSzybko<<endl;

     double zuzycie=(jakDaleko*0.01)*zP;
     if(jakSzybko<(0.3*pM) || jakSzybko>(0.8*pM)) zuzycie+=zuzycie*0.2;
     cout<<"Zuzycie paliwa: "<<zuzycie<<endl;

   if(zuzycie<pB)
     cout<<"Nie nalezy tankowac. "<<endl;
   int ile=0;
   if(zuzycie>pB)
   {
     while(zuzycie>0)
     {
       zuzycie-=pB;
       ile++;
     }

     cout<<"Nalezy tankowac "<<ile<<" razy."<<endl;
   }
    cout<<"Podroz zajmie: "<<((ile*0.10)+(jakDaleko/jakSzybko))<<" godzin"<<endl;


}

TKabriolet::TKabriolet(string m, double pB, double pM, double zP, bool dach_otwarty): TSamochod(m,pB,pM,zP), dach_otwarty(dach_otwarty)
{}

void TKabriolet::jedz(float jakSzybko, float jakDaleko)
{
         cout<<" \nDach Kabrioletu ";
         dach_otwarty==true ? cout<<"otwarty"<<endl : cout<<"zamkniety"<<endl;
     TSamochod::jedz(jakSzybko, jakDaleko);
}

bool TKabriolet::otworz_dach(bool dach_otwarty)
{
    dach_otwarty=true;
    return dach_otwarty;
}

bool zamknij_dach(bool dach_otwarty )
{
    dach_otwarty=false;
    return dach_otwarty;
}

 

3 odpowiedzi

+2 głosów
odpowiedź 8 stycznia 2016 przez Szykem2 Nałogowiec (29,510 p.)

Najpoważniejszy błąd to to, że w klasie bazowej pola mają być chronione, a u Ciebie są prywatne czyli nie masz do nich dostępu w klasie pochodnej. Drugie co to w konstruktorze kabrioleta masz ustawić zmienną dach_otwarty na false czyli rozumiem, że nie ma być wywoływany konstruktor z dodatkowym argumentem,

Skoro jedna funkcja ma się różnić to czemu nie użyć przesłaniania, czyli definiujesz funkcję o takiej samej nazwie z takimi samymi parametrami albo zrobić funkcję wirtualną. 

A co do otwartego dachu to tylko jednym if'em to załatwiasz

double zuzyciePaliwa = zP;
if(dach_otwarty)
    zuzyciePaliwa+=0.15*zP;

 

+2 głosów
odpowiedź 8 stycznia 2016 przez Dorion300 Szeryf (90,250 p.)
Zainteresuj się modyfikatorem "protected", gdyż masz za zadanie stworzyć pola chronione a nie prywatne.
Dzięki czemu masz dostęp do zmiennych klasy bazowej w podklasach.

A następnie do tych zmiennych się odwołujesz i obliczasz obecne zużycie paliwa.
0 głosów
odpowiedź 8 stycznia 2016 przez PoProstuTomasz Początkujący (470 p.)
Właśnie.. Protected, niby takie proste a wypadło mi z głowy :)
Dzięki serdeczne.

Podobne pytania

0 głosów
1 odpowiedź 1,279 wizyt
0 głosów
1 odpowiedź 319 wizyt
pytanie zadane 11 stycznia 2016 w C i C++ przez Melchior Obywatel (1,300 p.)
0 głosów
1 odpowiedź 850 wizyt

93,652 zapytań

142,573 odpowiedzi

323,088 komentarzy

63,165 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...