2013-12-18, 02:50
  #1
Medlem
Jag sitter och gör en egen miniräknare och har kommit till det stadie där användaren kommer få väldigt många alternativ att välja för vilken typ av matematisk operation som ska utföras.

Går det att komma runt att behöva använda en stor switch med ett case för att tillkala varje operations funktion?
Citera
2013-12-18, 03:34
  #2
Medlem
kinesarsles avatar
Tja, du kan ju använda miljarder ifsatser om det känns bättre.
Citera
2013-12-18, 03:54
  #3
Medlem
kinesarsles avatar
Alternativ lösning, som jag ej rekommenderar om du inte har stenkoll på vad du gör:

Kod:
#include <iostream>

using namespace std;

int add(int a, int b) { return a+b; }
int sub(int a, int b) { return a-b; }
int mod(int a, int b) { return a%b; }

main()
{
  int (*operation[3])(int, int);
  int a, b, op;

  operation[0]=&add;
  operation[1]=&sub;
  operation[2]=&mod;

  cout << "Skriv in två tal" << endl;
  cin >> a >> b;
  cout << "Välj operation" << endl << " 1. Addition" << endl 
       << " 2. Subtraktion" << endl << " 3. Modulo" << endl;
  cin >> op;
  cout << "Svaret blir " << operation[op-1](a,b) << endl;
}
__________________
Senast redigerad av kinesarsle 2013-12-18 kl. 03:58.
Citera
2013-12-18, 09:10
  #4
Medlem
Voldemort2s avatar
Om du vill komma runt detta problem använd designmönstret "Strategy". Enligt the gang of four: "find what varies and encapsulate it"". I detta fall algoritmen -> strategy.
Kod:
class Math
{
     
     public:
         virtual void doMath() = 0;

}

class Plus : public Math
{
    public:
        virtual void doMath();

}

Citera
2013-12-18, 18:00
  #5
Medlem
Nu ska jag ge det bästa svaret i tråden: Använd std::function samt std::map.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in