Witam, mam pewien problem.
Chciałbym dodać friend voida do swojego kodu, który wypisze przebieg (z klasy Samochod) oraz wartosc pojazdu (z klasy Pojazd).
Nie mam kompletnie pomysłu jak to zrobić, a na dziś (niedzielę) muszę mieć gotowy kod- jak do tej pory konstruktory i inne funkcje nie sprawiały mi problemów.
Jest może jakaś duszyczka, która będzie w stanie to ogarnąć? Próbowałem zadeklarować sobie klasę Samochod przed Pojazdem, ale wtedy nie mogę zrobić ciała funkcji.
oto poniższy kod;
#include<iostream>
#include<cstdlib>
#include<time.h>
using namespace std;
//class Samochod; - > by w klasie pojazd zrobic friend voida
class Pojazd{
protected:
string marka;
string model;
int rok_produkcji;
int wartosc_pojazdu;
public:
void zmien_wartosc(int);
virtual void wypisz();
Pojazd(string, string, int, int);
~Pojazd();
int get_produkcja();
//friend void wypisz_przebieg(const Pojazd& A, const Samochod& B);
};
class Samochod: public Pojazd{
protected:
int liczba_kol;
int przebieg;
public:
void wypisz() override;
void zmien_przebieg(int);
Samochod(string, string,int, int, int, int);
~Samochod();
};
class SamochodOsobowy: public Samochod{
protected:
int liczba_osob;
public:
void wypisz() override;
SamochodOsobowy(string, string,int, int, int);
~SamochodOsobowy();
};
class SamochodCiezarowy: public Samochod{
protected:
int ladownosc;
public:
void wypisz() override;
SamochodCiezarowy(string, string,int, int, int);
~SamochodCiezarowy();
};
//void wypisz_przebieg(const Pojazd &A, const Pojazd &B){
cout<<"Przebieg: "<< //jakie parametry?
cout<<"Wartosc: "<< //jakie parametry?
}
void wypisz_pojazdy(Pojazd* tab[], int size){
for(int i=0; i<size; i++)
tab[i]->wypisz();
}
void modyfikacja(Pojazd tab[], int size){
for(int i=0;i<size;i++){
tab[i]->zmien_wartosc(rand()%100);
if(Samochod wsk=dynamic_cast<Samochod*>(tab[i])){
wsk->zmien_przebieg(rand()%100);
}
}
}
void najstarszy_pojazd(Pojazd tab[], int size){
Pojazd najstarszy=tab[0];
for(int i=0; i<size; i++){
if(tab[i]->get_produkcja()<najstarszy->get_produkcja()){
najstarszy=tab[i];
}
}
cout<<"Najstarszy pojazd: "<<endl;
najstarszy->wypisz();
}
int main(){
srand(time(nullptr));
//Pojazd* A= new Pojazd("Audi", "RS6", 2015, 256000);
Pojazd* B= new Samochod("BMW", "M5", 2016, 455000, 4, 3152);
Pojazd* C=new SamochodOsobowy("Mercedes", "S 63", 2017, 64300, 10);
Pojazd* D=new SamochodCiezarowy("Renault", "Magnum", 2011, 650000, 35000);
const int tabSize=3;
Pojazd* tablica[tabSize]={B,C,D};
C->wypisz();
C->zmien_wartosc(155000);
C->wypisz();
B->wypisz();
//A->wypisz();
if(Samochod wsk=dynamic_cast<Samochod>(B)){
wsk->zmien_przebieg(123456);
}
wypisz_pojazdy(tablica, tabSize);
modyfikacja(tablica, tabSize);
wypisz_pojazdy(tablica, tabSize);
return 0;
}
//konstruktory i destruktory poszczegolnych klas
//Pojazd
Pojazd::Pojazd(string marka, string model, int rok_produkcji, int wartosc_pojazdu):marka{marka}, model{model}, rok_produkcji{rok_produkcji}, wartosc_pojazdu{wartosc_pojazdu}{
cout<<"Pojazd: Konstruktor."<<endl;
}
Pojazd::~Pojazd(){
cout<<"Pojazd: Destruktor."<<endl;
}
void Pojazd::wypisz(){
cout<<marka<<" "<<model<<" "<<rok_produkcji<<" "<<wartosc_pojazdu<<endl;
}
void Pojazd::zmien_wartosc(int wartosc_pojazdu){
this->wartosc_pojazdu=wartosc_pojazdu;
}
int Pojazd::get_produkcja(){
return rok_produkcji;
}
//Samochod
Samochod::Samochod(string marka, string model, int rok_produkcji, int wartosc_pojazdu, int liczba_kol, int przebieg):Pojazd(marka, model, rok_produkcji, wartosc_pojazdu), liczba_kol{liczba_kol}, przebieg{przebieg}{
cout<<"Samochod: Konstruktor."<<endl;
}
Samochod::~Samochod(){
cout<<"Samochod: Destruktor."<<endl;
}
void Samochod::zmien_przebieg(int przebieg){
this->przebieg=przebieg;
}
void Samochod::wypisz(){
cout<<"Marka: "<<marka<<" Model: "<<model<<" Rok produkcji: "<<rok_produkcji<<" Wartosc pojazdu: "<<wartosc_pojazdu<<" Liczba kol: "<<liczba_kol<<" Przebieg: "<<przebieg<<endl;
}
// SamochodOsobowy
SamochodOsobowy::SamochodOsobowy(string marka, string model, int rok_produkcji, int wartosc_pojazdu, int liczba_osob):Samochod(marka, model, rok_produkcji, wartosc_pojazdu, liczba_kol, przebieg), liczba_osob{liczba_osob}{
cout<<"SamochodOsobowy: Konstruktor."<<endl;
}
SamochodOsobowy::~SamochodOsobowy(){
cout<<"SamochodOsobowy: Destruktor."<<endl;
}
void SamochodOsobowy::wypisz(){
cout<<"Marka: "<<marka<<" Model: "<<model<<" Rok produkcji: "<<rok_produkcji<<" Wartosc pojazdu: "<<wartosc_pojazdu<<" Liczba osob: "<<liczba_osob<<endl;
}
//SamochodCiezarowy
SamochodCiezarowy::SamochodCiezarowy(string marka, string model, int rok_produkcji, int wartosc_pojazdu, int ladownosc):Samochod(marka, model, rok_produkcji, wartosc_pojazdu, liczba_kol, przebieg), ladownosc{ladownosc}{
cout<<"SamochodCiezarowy: Konstruktor."<<endl;
}
SamochodCiezarowy::~SamochodCiezarowy(){
cout<<"SamochodCiezarowy: Destruktor."<<endl;
}
void SamochodCiezarowy::wypisz(){
cout<<"Marka: "<<marka<<" Model: "<<model<<" Rok produkcji: "<<rok_produkcji<<" Watosc pojazdu: "<<wartosc_pojazdu<<" Ladownosc: "<<ladownosc<<endl;
}