Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563

    C++ - Elenco di argomenti variabili

    Salve.
    Come si può specificare una funzione con un elenco di argomenti variabili?
    Sapevo che in C si faceva cosi

    codice:
    void foo(...);
    ma poi come si fa a contare gli argomenti che ci sono? Ho letto va_list ma non saprei.
    E in C++ come si fa?
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  2. #2
    che io sappia CONTARE non puoi...
    a meno che in un paramentro non passi il numero degli argomenti
    DYNAMIC+ [ E-mail ]

    Secondo me non si può fare!

  3. #3
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    hoop
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ho scritto un semplice esempio che si spiega da solo ...

    codice:
    #include <iostream>
    #include <stdarg.h>
    
    using namespace std;
    
    float media( int n, ... )
    {
      va_list pp;
      float med = 0.0f;
      float sum = 0.0f;
    
      if(n)
      {
        va_start(pp, n);	
    		
        for (int ix = 0; ix < n; ix++)
    	sum += va_arg(pp, float);
    		
        va_end(pp); 
    
        med = sum/n;
      }
    
      return(med);
    }
    
    void main()
    {
      cout << "Media: " << media(3, 1.0f, 2.0f, 3.0f) << endl;
    
      cout << "Media: " << media(5, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f) << endl;
    
      cout << "Media: " << media(2, 10.0f, 20.0f) << endl;
    }
    ma ce ne sono tanti su Internet ...

  5. #5
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    sum += va_arg(pp, float);
    Questa riga non mi è chiara. Prendo un argomento da pp (quale argomento? e float cosa vuol dire? il tipo di argomento pssato?
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ottieni il "prossimo" argomento di tipo float e sommalo a sum.

    Per info sulla macro va_arg leggi qui

  7. #7
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Ok ora mi è completamente chiaro.
    Leggendo però su internet ho letto,riguardo gli elenchi variabili di argomenti

    In C++ l'overloading delle funzioni effetua le stesse operazioni delle liste variabili di argomenti in C

    eppure io non trovo il nesso logico...
    L'overloading delle funzioni sarebbe



    codice:
    int ciao(int,int)
    codice:
    double ciao(double,double)
    Questo è l'overloading delle funzioni...e cosa c'entra??
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Nel senso (limitato) che se hai una funzione in C che usa gli argomenti variabili perche' puo' riceverne 1, 2 o 3, allora in C++ puoi dichiarare le 3 funzioni

    int ciao(int op1);
    int ciao(int op1, int op2);
    int ciao(int op1, int op2, int op3);

    e una qualsiasi chiamata del tipo

    ciao(1);

    ciao(1, 2);

    ciao(1, 2, 3);

    funzionerà ugualmente, dandoti l'impressione che la funzione ciao lavori come se avesse gli argomenti variabili.

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    11
    Originariamente inviato da oregon
    codice:
    	sum += va_arg(pp, float);
    Questo però deve essere: sum+=(float)va_arg(pp,double);

  10. #10
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    giustamente ci vuole il cast.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.