Funktion mit 2 Parameter nur mit 1 Parameter aufrufen?



  • Hallo!
    Ich hab folgende Frage: Wenn ich eine Funktion geschrieben habe, die 2 Parameter benötige kann ich diese auch nur mit 2 Parametern aufrufen. Allerdings hat sich es ergeben, dass ich an anderer Stelle die gleiche Funktion aufrufen muss, aber dabei nur 1 Parameter brauche, die Funktion aber ansonsten das gleiche erledigen soll. Hier ein bisschen Code:

    void Convert_char_to_int (char &x, char &x2)
    {
    	for (int k='a'; k<'k'; ++k)
    		{
    			switch(x)
    			{
    				case 'a':	x = 0; break;
    				case 'b':	x = 1; break;
    				case 'c':	x = 2; break;
    				case 'd':	x = 3; break;
    				case 'e':	x = 4; break;
    				case 'f':	x = 5; break;
    				case 'g':	x = 6; break;
    				case 'h':	x = 7; break;
    				case 'i':	x = 8; break;
    				case 'j':	x = 9; break;
    			}
    			switch(x2)
    			{
    				case 'a':	x2 = 0; break;
    				case 'b':	x2 = 1; break;
    				case 'c':	x2 = 2; break;
    				case 'd':	x2 = 3; break;
    				case 'e':	x2 = 4; break;
    				case 'f':	x2 = 5; break;
    				case 'g':	x2 = 6; break;
    				case 'h':	x2 = 7; break;
    				case 'i':	x2 = 8; break;
    				case 'j':	x2 = 9; break;
    			}
    		}
    }
    
    void Convert_char_to_int (char &x)  
    {
    	for (int k='a'; k<'k'; ++k)
    	{
    		switch(x)
    		{
    			case 'a':	x = 0; break;
    			case 'b':	x = 1; break;
    			case 'c':	x = 2; break;
    			case 'd':	x = 3; break;
    			case 'e':	x = 4; break;
    			case 'f':	x = 5; break;
    			case 'g':	x = 6; break;
    			case 'h':	x = 7; break;
    			case 'i':	x = 8; break;
    			case 'j':	x = 9; break;
    		}
    	}
    }
    

    Gibt es da eine bessere Möglichkeit dieses Problem zu lösen?



  • Default-Parameter

    void Convert_char_to_int (char &x, char &x2 = '0')
    //...
    case '0': break;
    


  • ja, definitiv:

    void convert_char_to_int(char& c) {
      if (c >= 'a' && c < 'k')
        c = c - 'a';
    }
    
    void convert_chars_to_int(char& c1, char &c2) {
      convert_char_to_int(c1);
      convert_char_to_int(c2);
    }
    

    Warum du da diese Schleife eingebaut hast, versteh ich nicht ganz, also hab ich sie weggelassen ...



  • Ach ja, so ging das. Danke!



  • Wofür die Schleife? Wofür der switch?

    Wie wärs mit

    void Convert_char_to_int (char &x)  
    {
       x -= 'a';
    }
    

    ?

    In dieser Situation würde ich die Funktion immer 2-mal aufrufen, das schaut mir
    auberer aus.
    Ansonsten kannst du immer noch überladen, d.h. eine Funktion zweimal mit gleichem
    Namen aber anderen Paramtern implemtieren. Eine könnte zB die andere Aufurfen,

    nachdem die Prameter richtig hingebogen wurden.

    edit: ok, zu langsam



  • Theston schrieb:

    Default-Parameter

    void Convert_char_to_int (char &x, char &x2 = '0')
    

    Könnte man machen, wenn x2 ne const-Referenz wär. So aber definitiv nicht.



  • Kann ja sein, er brauchs auch mal in nem andern Zusammenhang 😉
    edit: hm... k



  • Dass die Schleife wegmuss hab ich auch vorhin gemerkt, allerdings versteh ich nicht, wie

    void Convert_char_to_int (char &x)  
    {
       x -= 'a';
    }
    

    die ganze switch anweisung ersetzen soll.

    @Bashar: Wo liegt das Problem mit der (nicht) const referenz?



  • Schizzman: man kann keinen rvalue an eine nicht-const-Referenz binden.



  • also sind default parameter bei referenzen nur möglich, wenn diese const sind; und bei allen nicht referenz Parametern brauchen sie nicht const zu sein?



  • Falsche Schlussfolgerung. Man kann immernoch lvalues an nicht-const-Referenzen binden. Ich hoffe BTW du fragst das rein aus Interesse, und nicht weil du die default-Parameter-Lösung ernsthaft in Betracht ziehst.



  • void Convert_char_to_int (char &x)  
    {
       x -= 'a';
    }
    

    ASCII Code von x minus ASCII Code für 'a' = dein Ergebniss


Anmelden zum Antworten