45. Spelet Lotto (objektorienterat)

Gör en ny version av Uppgift 43 där programmet är objektorienterat.

Användaren ska först välja hur många lottokuponger hen vill ha. Därefter ska programmet helt enkelt skapa det önskade antalet lottokupongsobjekt (med dynamisk minnesallokering).

Det ska alltså finnas en klass (kalla den exempelvis Lotto). Varje gång ett objekt skapas så anropas en konstruktor. Det är i denna konstruktor du lägger din gissa-funktionalitet. När alla objekten har skapats (alla gissningarna är gjorda), så skapas den rätta raden vilket sker med hjälp av en annan konstruktor (där du lägger din slumpa-funktionalitet).

Lottoklassen ska ligga i en egen inkluderingsfil (typ Lotto.h). Definitionerna av medlemsfunktionerna ska ligga i en egen cpp-fil (typ Lotto.cpp).

Slutligen finns en tredje fil som innehåller main-funktionen.

Du kan använda nedanstående Lotto.h och main.cpp, eller skapa egna.

Exempel på färdig Lotto.h

#pragma once

class Lotto 
{
public:
  Lotto(); // Konstruktor som genererar ett köpt Lotto-objekt (en kupong).
  Lotto(bool); // Konstruktor som genererar den rätta raden (själva dragningen). 
  ~Lotto(); // Destruktor.
  int Jämför(Lotto * korrekt_rad); // Medlemsfunktion som jämför två Lotto-objekt. 
private: 
  unsigned short * nummer; 
  unsigned short * extra_nummer; 
};

Exempel på färdig main.cpp

#include "Lotto.h" 
#include <iostream>
using namespace std;

int main() 
{ 
  int antal; 
  int total_antal_korrekta = 0; 
  cout << "Antal Lottokuponger? "; 
  cin >> antal; 
  Lotto * kuponger = new Lotto[antal]; // Första konstruktorn anropas antal gånger. 
  Lotto korrekt_rad(true); // Andra konstruktorn anropas en gång. 
  for(int i = 0; i < antal; i++) // Varje ifylld kupong jämförs med rätta raden.
    total_antal_korrekta+=kuponger[i].Jämför(&korrekt_rad); 
  cout << endl<<"Totalt antal rätt: " << total_antal_korrekta<<endl;
  delete [] kuponger; // Frigör minnet (anrop av destruktorn).
  return 0;
}

Exempel på hur det kan se ut (det gröna är användarens inmatning):

Hur många kuponger? 2

INMATNING AV KUPONG
Ange 7 olika heltal (1-35):
23
0
Talet 0 ligger ej i intervallet 1-35!
Trettio
Felaktig inmatning!
7
20
4
18
35
4
Talet 4 har redan registrerats!
10
OK, du har valt följande: 4 7 10 18 20 23 35

INMATNING AV KUPONG
Ange 7 olika heltal (1-35):
1
6
8
22
3
30
2
OK, du har valt följande: 1 2 3 6 8 22 30

RÄTTNING AV KUPONG (4 7 10 18 20 23 35):
Du fick 5 rätt, varav 2 var tilläggstal.
Rätt rad: 2 4 9 22 23 31 35
Tilläggstal: 3 7 18 32

RÄTTNING AV KUPONG (1 2 3 6 8 22 30):
Du fick 3 rätt, varav 1 var tilläggstal.
Rätt rad: 2 4 9 22 23 31 35
Tilläggstal: 3 7 18 32

Totalt antal rätt (2 kuponger): 8

Lämna ett svar