Struktury z tablicami

0

Witam, potrzebuję pomocy w zrozumieniu działania struktur. Mam zadanie, które wygląda mniej więcej tak, mamy 3 stuktury:

Klient
{
string imie, nazwisko, adres;
}

Auta
{
int rocznik;
string model, kolor;
oraz (tablica obiektów typu Klient)
}

Salon
{
int ilosc_pojazdow, saldo_konta;
string adres;
oraz (tablica obiektów typu Auta)
}

W jaki sposób zadeklarować te tablice obiektów ? mają one być dynamiczne w funkcji main, podajemy najpierw ilość pojazdów, a następnie ilość klientów < te liczby określają wielkość tablicy. Bardzo proszę o pomoc, pozdrawiam serdecznie :)

0
kq napisał(a):

Użyj std::vector.
https://en.cppreference.com/w/cpp/container/vector

Dzięki za odpowiedź, ale czy jest jakiś inny sposób ? Niestety nie doszliśmy do wektorów i mamy to zrobć wskaźnikami, jednak nie potrafię ich zastosować w strukturach, tym bardziej że tu tablica jest odwołaniem do kolejnej struktury.

0

Czy masz zakaz nauki na własną rękę? Jak nie - to użyj std::vector.

W przeciwnym wypadku wykładowca chce, żebyście mieli więcej roboty implementując niepoprawne rozwiązania z new[]/delete[]. Możesz mu podesłać https://dsp.krzaq.cc/post/176/ucze-sie-cxx-kiedy-uzywac-new-i-delete/ a potem zagryźć zęby i robić co każe :​(

0

Dzięki za odpowiedź, ale czy jest jakiś inny sposób?

Powinieneś utworzyć własne konstruktory i destruktory w których alokujesz i usuwasz dynamiczne tablice obiektów. Przydałby się też jakieś przeładowania operatora [].
Przyjrzyj się temu przykładowi. Myślę że jak zrozumiesz kod, to będziesz mógł łatwo dodać klasę Salon według podanego schematu.

#include <iostream>
#include <cassert>

using namespace std;

struct Client
{
    string name {"John"}, surname {"Gearless"}, addres {"Huston, Broken Wheel street 6/9"};
};

class Car
{

public:

    Car( size_t number_of_clients_ ) : number_of_clients {number_of_clients_}
    {
        table = new Client[number_of_clients];
        for( int i {0} ; i<number_of_clients ; ++i )
        {
            table[i].name += to_string(i);
        }
    }
    ~Car(){ delete []table; }

    Client& operator[]( int i )
    {
        assert( i>=0 && i<number_of_clients );
        return table[i];
    }

    const Client& operator[]( int i ) const
    {
        assert( i>=0 && i<number_of_clients );
        return table[i];
    }

    int year {2000};
    string model, color;

private:

    int number_of_clients {0};   
    Client *table {nullptr};
};

int main()
{
    Car ferrari {5}; // creates Car with table of 5 clients
    cout << ferrari[3].name << "\n";
    ferrari[3].name = "Marry";
    cout << ferrari[3].name << "\n";

    const Car roadroller {15}; // creates constant Car with table of 15 clients
    cout << roadroller[13].name << "\n";
    // roadroller[13].name = "Batman"; // does not compile due to roadroller is constant

    return 0;
}

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