W
Dein Code hat diverse Probleme:
Du hast einen Destruktor von Customer, dieser ist aber leer -> wozu also überhaupt einen schreiben, lass ihn weg!
Du benutzt "new". Das ist eine schlechte Idee im allgemeinen und hier im Besonderen, weil du kein korrespondierendes "delete[]" hast. Du hast also ein Speicherleck und zerstörst deine Customer sowieso nicht ordentlich.
Du benutzt "using namespace std;". Kann man machen, würde ich aber von abraten. Insbesondere weil es auch in C++ Arrays gibt, die std::array heißen, also dann, wenn du das "using namespace std" benutzt, mit deiner Variablen namens Array kollidieren.
Das Array. Verwende in C++ nicht das C-Style Array (welches, wie der Name sage, von C kommt) - sondern nutze stattdessen in C++ bevorzugt std::array (für eine feste Zahl Elemente) oder std::vector (wenn variabel viele Elemente). Also statt Customer* array = new Customer[5]; nimmst du std::array<Customer, 5> my_array - oder wohl besser, wenn du dich nicht auf 5 festlegen und sofort erzeugen willst: std::vector<Customer> my_vector. Du brauchst auch kein new - und mit vector landen deine Customer-Objekte dann trotzdem im Freispeicher (bei array nicht).
Schau dir mal an, wie man den operator<< überladen kann. Dann brauchst du das toString nicht mehr.
Es ist oft vorteilhaft, Objekt-Variablen (wie string) als const & an Funktionen zu übergeben.
Seit die bewusst, dass die 5 in Customer getWinner(Customer dat[5]) keine Bedeutung hat! Das ist ein Problem dieser C-Arrays, das du mit ohne wohl nicht hättest. Deine getWinner-Funktion gibt dann eine Kopie des Gewinners zurück. Ist das wirklich das, was du willst?
a) srand ruft man 1x im Programm auf, nicht 1x pro Funktion
b) rand % 4 liefert Werte von 0 bis 3. Der Customer[4] wird also nie gewinnen...
c) srand/rand sind Funktionen aus C. In C++ kannst du stattdessen den Header <random> nebst einer std::uniform_int_distribution verwenden.
alles, was ich nicht erwähnt habe