Friend Void

0

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;
}

1
#include <iostream>
#include <string>

using namespace std;

class A {
public:
	A(int a) : a{ a } {}
	virtual ~A() {}
	virtual std::string ToString() const { return "A: " + std::to_string(a); }
private:
	int a;
};

class B : public A {
public:
	B(int a, int b) : A{ a }, b{ b } {}
	virtual ~B() {}
	virtual std::string ToString() const override { return A::ToString() + ", B: " + std::to_string(b); }
	friend std::ostream& operator<<(std::ostream& os, const B& b) { return os << b.ToString(); }
private:
	int b;
};


int main() {
	B b(1, 2);
	std::cout << b << std::endl;

	return 0;
}

https://wandbox.org/permlink/gh4B1Dlfm9gtEJ8Z

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