Go Down

Topic: methode parameterübergabe  (Read 166 times) previous topic - next topic

buddhafragt

May 26, 2019, 01:31 pm Last Edit: May 26, 2019, 01:32 pm by buddhafragt
Hallo,
ich versuche mich gerade an einer Funktion mit Parameterübergabe.
Der 3. Parameter soll optional sein, und die Funktion soll abfragen, ob ein Wert vorhanden ist oder nicht.

funktion(int wert1, int wert2, int wert3)

Also diese Situation: funktion(234, 432, ) ... (an der 3 Stelle steht nichts)

Wie bekomme ich das hin??

Gruß, Michael


combie

#1
May 26, 2019, 01:42 pm Last Edit: May 27, 2019, 09:19 am by combie
Code: [Select]
// überladen
funktion(int wert1, int wert2, int wert3)

funktion(int wert1, int wert2)




Code: [Select]
// optionaler Parameter mit vorbesetzung
funktion(int wert1, int wert2, int wert3=-1)
Alle sagen: Das geht nicht!
Einer wusste das nicht und probierte es aus.
Und: Es ging nicht.

uwefed

#2
May 26, 2019, 01:51 pm Last Edit: May 26, 2019, 01:52 pm by uwefed
Wie combie schon sagt:

Das hast Du schon oft verwendet.
zB
Serial.print(Variable);
Serila.print(Variable, BIN);

Du schreibst 2 Funktionen mit dem gleichen Namen aber verschiedener Parameteranzahl.

Bei Aufruf der Funktion wird automatisch die verwendet, die den Parametern des Ausrufs entspricht.

Oder was ich nicht wußte :
funktion(int wert1, int wert2, int wert3=-1)
Du gibst dem optionalen Parameter einen Wert in diesem Fall -1 da das in C der Wert für einen Fehler ist. Du kannst einfach unterscheiden ob kein Parameter übergenben wurde (Wert ist -1) oder einer übergeben wurde dann ist der Wert verschieden von -1.

Grüße Uwe

michael_x

Quote
dann ist der Wert verschieden von -1.
Genaugenommen kannst du natürlich auch funktion (a, b, -1) aufrufen. Das kann die Funktion nicht von funktion (a, b) unterscheiden. Wenn es darauf ankommt (ankäme), geht das nur ohne default-Wert, aber mit den zwei Varianten mit demselben Namen.

gregorss

ich versuche mich gerade an einer Funktion mit Parameterübergabe.
Der 3. Parameter soll optional sein, und die Funktion soll abfragen, ob ein Wert vorhanden ist oder nicht.
...
Wie schon gesagt wurde: Das nennt man das Überladen einer Funktion.

Ein Compiler unterscheidet Funktionen anhand deren Signaturen.

void funktion(char a, char b) {...}

und

void funktion(char x, char y, char z) {...}

sind für den Compiler unterschiedliche Funktionen. Du kannst einfach zwei Funktionen schreiben, die gleich heißen, aber unterschiedlich viele Parameter entgegennehmen. Oder Du schreibst

void funktion(char n, char o, char p=5) {...}

dann hat die Funktion einen optionalen dritten Parameter, der auf 5 gesetzt wird, falls beim Aufruf nicht angegeben.

Gruß

Gregor
„Ich glaube, ich leg' mich noch mal hin", sagte das Bit.

Go Up