Расширение программы с помощью агрегации - PullRequest
0 голосов
/ 21 апреля 2020

Я должен добавить несколько баллов для завтрашнего обзора кода с лектором.

Я должен расширить проект с баллами:

  1. использование агрегации

  2. классы вложенности (только в приватном поле)

  3. использование механизма дружбы

  4. использование конструкторов (копирование, делегирование, по умолчанию) и деструкторов

  5. спецификатор автоматического объявления

..., из которых я добавил агрегацию, которая работает, и вложение классов, к сожалению, не работает.

Когда в основном я пытаюсь вызвать 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;
}
...