Funktionsaufruf nach Typen



  • Hallo,

    die Suchfunktion hatte ich benutzt, jedoch, vllt. da es mir schwer fällt, mein Problem in wenige Worte zu fassen, erfolglos. 😞

    Ich habe zwei Unterprogramme geschrieben, mit dem selben Namen – es geht um die Fakultät – einmal für double- und einmal für Integerwerte.
    Leider führt mein Programm immer nur die Integerfunktion aus. Hier mein Code zur Veranschaulichung:

    double fakultaet (double n)
    {
    	double fakul1 = 1.0, fakul2 = 1.0;
    
    	for (int counter = 1; counter <= n; counter++)
    	{
    		fakul2 = fakul1 * counter;
    		fakul1 = fakul2;
    	}
    	return (fakul2);
    }
    
    int fakultaet (int n)
    {
    	int fakul1 = 1, fakul2 = 1;
    
    	for (int counter = 1; counter <= n; counter++)
    	{
    		fakul2 = fakul1 * counter;
    
    		if (fakul1 != fakul2 / counter)
    		{
    			return (INT_OVERFLOW);
    		}
    		fakul1 = fakul2;
    	}
    	return (fakul2);
    }
    

    Und hier der Case fall, mit dem ich die Funktionen benutzen möchte:

    case '!':	if (ergebnis >= 0.0)
    		{
    	            if (ganzZahl (zahl) == true)
    		    {
    		    ergFakul = fakultaet (ergebnis);
    		    if (ergFakul == INT_OVERFLOW)
    		   {
    		        cout << "Error - Int_Overflow" << endl << endl,
    			cout << ergebnis;
    	       	}
    		else
    		{
    		     ergebnis = ergFakul;				
                         cout << ergebnis;
    		}	
    	       }
    	else
    	{
    	       ergFakul = fakultaet (ergebnis);
    	       ergebnis = ergFakul;
    	       cout << ergebnis;
    							    }					
    }
    else
    {
    cout << "Fakultaet ist nur fuer positive Werte moeglich" << endl << endl
    cout << ergebnis;
    }
    break;
    

    Das Programm sollte tatsächlich anhand des Datentyps sich die entsprechende Funktion aussuche. Wie mache ich das?



  • Kommt halt drau an, was 'ergebnis' für einen Typen hat. Lass mich raten. Er hat Typ int . 😉



  • danke für die Antwort.

    Allerdings ist mein ergebnis ein double Wert. 😞



  • Wie kommmst du drauf, dass die integer Version aufgerufen wird?

    Klar wird immer die gleiche Version aufgerufen. Du überibst ja immer den gleichen Typen..

    Zeig doch mal bitte ein lauffähiges kleines Beispiel. Denn ohne andere Details zu kennen können wir nur raten..



  • Du mußt dann explizit den Parameter in int wandeln:

    ergFakul = fakultaet (static_cast<int>(ergebnis));
    

    Aber welchen Sinn macht eine double-Fakultät-Funktion?

    Und zwei Variablen innerhalb der Fakultät-Schleife brauchst du auch nicht...



  • Danke Th69, das probiere ich gleich aus. Der Sinn ist selbstzweck, halt die Aufgabenstellung. 😉
    Ich denke es geht eben um die Typunterscheidung.=)



  • Immer noch kein Erfolg, meine Double-Funktion wird weiterhin fies ignoriert.



  • Th69 castet ja auf int. Dann caste halt auf double..


Anmelden zum Antworten