Я должен добавить несколько баллов для завтрашнего обзора кода с лектором.
Я должен расширить проект с баллами:
использование агрегации
классы вложенности (только в приватном поле)
использование механизма дружбы
использование конструкторов (копирование, делегирование, по умолчанию) и деструкторов
спецификатор автоматического объявления
..., из которых я добавил агрегацию, которая работает, и вложение классов, к сожалению, не работает.
Когда в основном я пытаюсь вызвать Pojazdy :: Spe c s1, это, к сожалению, вылетает, говоря, что это в приватной области, и, к сожалению, ничего не поделаешь это.
Что касается остальных предметов, я понятия не имею, поэтому я был бы признателен за любую помощь - они не должны быть сложными методами, но самое простое использование остальных предметов из 3 -5.
main. cpp
#include "pojazdy.h"
#include <iostream>
using namespace std;
int main()
{
// AGRGEGATION
class Adresy
{
public:
string ulica, miasto, woj;
Adresy(string ulica, string miasto, string woj)
{
this->ulica = ulica;
this->miasto = miasto;
this->woj = woj;
}
};
class Pracownik
{
private:
Adresy* adresy;
public:
int id;
string nazwisko;
Pracownik(int id, string nazwisko, Adresy* adresy)
{
this->id = id;
this->nazwisko = nazwisko;
this->adresy = adresy;
}
void display()
{
cout << endl;
cout << "ID: " << id << " || " << "Nazwisko: " << nazwisko << " || " << "Ulica: " << adresy->ulica << " || " << "Miasto: " << adresy->miasto << " || " << "Woj: " << adresy->woj << endl;
}
};
//END AGRGEGATION
Pojazdy** poj;
Pojazdy*** p_poj = &poj;
int size{ 0 }, index{ 0 };
Pojazdy::Petla(poj, size);
Pojazdy::print(poj, size);
//Pojazdy::print(p_poj, size);
Pojazdy::wyrejestruj(poj, size, 0);
Pojazdy::print(poj, size);
Pojazdy::wyrejestruj(poj, size);
Adresy a1 = Adresy("Kwiatkowskiego", "Szczecin", "Zachodniopomorskie");
Pracownik p1 = Pracownik(101, "Kowalski", &a1);
p1.display(); // show aggregation operation
Pojazdy::Spec s1;
cout << "Wynik: " << s1.p_spec << endl;
return 0;
}
pojazdy.h
#ifndef pojazdy_h
#define pojazdy_h
#include <iostream>
#include <cstdlib>
#include "klienci.h"
using namespace std;
class Pojazdy
{
// NESTING OF CLASSES IN A PRIVATE FIELD
private:
class Spec
{
public:
string typ;
string model;
int moc;
int pojemnosc;
int przyspieszenie;
int zuzycie_p;
void p_spec(string typ, string model, int moc, int pojemnosc, int przyspieszenie, int zuzycie_p)
{
cout << "Podaj specyfikacje pojazdu:" << endl;
cin >> typ >> model >> moc >> pojemnosc >> przyspieszenie >> zuzycie_p;
cout << "Podano specyfikacje pojazdu!" << endl;
}
};
public:
string typ;
string marka;
string model;
string z_dod;
int ilosc;
int cena;
Pojazdy();
~Pojazdy();
Pojazdy(const string& Typ, const string& Marka, const string& Model, int Cena);
//static void dodaj();
static void d_pojazd(Pojazdy**& pojazdy, int& size, const string& Typ, const string& Marka, const string& Model, int Cena);
static void wyrejestruj(Pojazdy**& pojazdy, int& size);
static void wyrejestruj(Pojazdy**& pojazdy, int& size, int index);
static void print(Pojazdy** pojazdy, int size);
static void print(Pojazdy*** pojazdy, int size);
static void Petla(Pojazdy**& p, int& size);
//void wyswietl();
int get_ilosc() { return ilosc; }
string get_typ() { return typ; }
string get_marka() { return marka; }
string get_model() { return model; }
int get_cena() { return cena; }
void set_ilosc(int x);
};
#endif
pojazdy. cpp (здесь все работает)
#include "pojazdy.h"
#include <iostream>
using namespace std;
void Pojazdy::set_ilosc(int x) { ilosc = x; }
Pojazdy::Pojazdy() {
}
Pojazdy::~Pojazdy() {
}
Pojazdy::Pojazdy(const string& Typ, const string& Marka, const string& Model, int Cena) : typ(Typ), marka(Marka),model(Model), cena(Cena)
{
}
void Pojazdy::Petla(Pojazdy**& p, int& size) {
char z_dod;// = 'N';
do {
string typ, marka, model;
int cena;
cout << "DODAWANIE POJAZDU..." << endl;
cout << "Podaj typ pojazdu:";
cin >> typ;
cout << "Podaj marke pojazdu: ";
cin >> marka;
cout << "Podaj model pojazdu: ";
cin >> model;
cout << "Dodaj cene pojazdu: ";
cin >> cena;
Pojazdy::d_pojazd(p, size, typ,marka,model,cena); //odpowiada za dodawnie
cout << "Czy chcesz zakonczyc dodawanie? Jesli tak, wcisnij Y/N: ";
cin >> z_dod;
} while (z_dod == 'N' || z_dod == 'n');//while (p[size]->z_dod == "N" ||p[size]->z_dod == "n");
}
void Pojazdy::print(Pojazdy** pojazdy, int size) {
std::cout << "====================================" << std::endl;
for (int i{ 0 }; i < size; i++)
std::cout << "Typ: " << pojazdy[i]->get_typ() << " Marka: " << pojazdy[i]->get_marka() << " Model: " << pojazdy[i]->get_model() << " Cena: " << pojazdy[i]->get_cena() << std::endl;
}
void Pojazdy::print(Pojazdy*** pojazdy, int size) {
std::cout << "====================================" << std::endl;
for (int i{ 0 }; i < size; i++)
for(int j{0};j <4;j++)
std::cout << "Typ: " << pojazdy[i][j]->get_typ() << " Marka: " << pojazdy[i][j]->get_marka() << " Model: " << pojazdy[i][j]->get_model() << " Cena: " << pojazdy[i][j]->get_cena() << std::endl;
}
void Pojazdy::wyrejestruj(Pojazdy**& pojazdy, int& size) {
for (size_t i{ 0 }; i < size; i++)
delete pojazdy[i];
delete[] pojazdy;
size = 0;
pojazdy = NULL;
}
void Pojazdy::wyrejestruj(Pojazdy**& pojazdy, int& size, int index) {
if (index < size) {
Pojazdy** temp = new Pojazdy * [size - 1];
short int j{ -1 };
for (size_t i{ 0 }; i < size; i++) {
if (i != index) {
j++;
temp[j] = pojazdy[i];
}
}
delete[] pojazdy;
--size;
pojazdy = temp;
}
else
std::cout << "Pamiec zwolniona!" << std::endl;
}
void Pojazdy::d_pojazd(Pojazdy**& pojazdy, int& size, const string& Typ, const string& Marka, const string& Model, int Cena) {
Pojazdy** temp = new Pojazdy * [size + 1];
if (size == 0)
temp[size] = new Pojazdy(Typ, Marka, Model, Cena);
else {
for (int i{ 0 }; i < size; i++)
temp[i] = pojazdy[i];
delete[] pojazdy;
temp[size] = new Pojazdy(Typ,Marka,Model,Cena);
}
++size;
pojazdy = temp;
}