Zbiorniki mają być współdzielone przez kilka silników. Dlatego użyj wskaźnika std::shared_ptr.
Jeżeli nie możesz jawnie używać new to musisz użyć funkcji std::make_shared to tworzenia nowych silników.
Silnik musi zawierać wektor (lub listę) zawierający wskaźniki inteligentne na zbiorniki paliwa.
Do stworzenia wątków możesz użyć std::thread (więcej informacji https://en.cppreference.com/w/cpp/thread/thread/thread).
Pamiętaj, żeby metoda pobierz była zabezpieczona muteksem (https://en.cppreference.com/w/cpp/thread/mutex).
Do oczekiwania przed pobraniem paliwa użyj funkcji std::this_thread::sleep_for (https://en.cppreference.com/w/cpp/thread/sleep_for).
Przygotowałem kod, który może posłużyć za bazę do twojego programu:
#include <iostream>
#include <memory>
#include <chrono>
#include <vector>
class ZbiornikPaliwa {
public:
ZbiornikPaliwa(unsigned int pojemnosc) {};
int pobierz(unsigned int pojemnosc) {};
};
class Silnik {
public:
Silnik(std::chrono::seconds interwal, unsigned int iloscPaliwa) {};
void dodajZbiornik(std::shared_ptr<ZbiornikPaliwa> zbiornik) {};
};
int main()
{
std::vector<Silnik> silniki;
silniki.emplace_back(std::chrono::seconds(2), 5);
silniki.emplace_back(std::chrono::seconds(1), 1);
silniki.emplace_back(std::chrono::seconds(3), 2);
for (const int &pojemnosc : {10, 11, 12, 13, 14, 15, 16, 17, 18, 19}) {
auto zbiornik = std::make_shared<ZbiornikPaliwa>(pojemnosc);
for (auto &silnik : silniki) {
silnik.dodajZbiornik(zbiornik);
}
}
// poczekaj na zakończenie wątków
return 0;
}