Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    6

    [C++] Domande notazione e non...

    Ciao a tutti sono nuovo... parto subito con un quesito
    Per motivi universitari mi sto ricimentando sul C++ dopo 3 anni e mi sono trovato un pò spiazzato a recuperare "tutte" le mie conoscenze... Ciò non toglie che mi sono sorti dei grossi dubbi ad esempio guardando questo pezzo di programma... Mi sapete dare qualche spiegazione a riguardo? pls

    #include<iostream>
    using namespace std;
    template<unsigned int N, class T> //Questo è buio totale... cos'è? il template cosa fa?
    class A
    {
    T a[N];
    int c;
    public:
    A() : c(0){} //Questa dichiarazione del costruttore? Conoscevo solo il tipo A(){...}
    void p (T x){a[c++]=x;} //Il parametro formale cos'è? Una variabile di tipo T?
    T g(){return a[--c];} //Questo?... un metodo di tipo T?!
    void print()
    {
    for(int i=0;i<c;i++)
    cout<<a[i]<<"";
    cout<<endl;
    }
    };

  2. #2
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563

    Re: [C++] Domande notazione e non...

    codice:
    #include<iostream>
    using namespace std;
    template<unsigned int N, class T>    //Questo è buio totale... cos'è? il template cosa fa?
    class A
    {
          T a[N];
          int c;
          public:
           A() : c(0){}     //Questa dichiarazione del costruttore? Conoscevo solo il tipo A(){...}
           void p (T x){a[c++]=x;}   //Il parametro formale cos'è? Una variabile di tipo T?
           T g(){return a[--c];}   //Questo?... un metodo di tipo T?!
           void print()
           {
                for(int i=0;i<c;i++)
                 cout<<a[i]<<"";
                 cout<<endl;
           }
    };
    La tua diffcoltà principale è sul template.
    I template in C++ permettono di scrivere programmi riutilizzabili.
    template <class T> dichiara un template T
    Ora se tu hai una funzione
    codice:
    void print (T stampa){cout << T;}
    Grazie al template dichiarato, al valore di T potrai sostituire qualsiasi tipo di dato, che sia esso int, float, char, double e persino dati definiti dall'utente (se ne hai fatto l'overloading)
    codice:
    int a = 0;
    float b = 3.5f;
    double c = 3.54;
    MiaClasse e;
    MiaStruct f;
    print (a);
    print (b);
    print (c);
    print (e);
    print (f);
    Grazie al template il programma funzionerà correttamente.
    (Per i dati definiti dall'utente devi però fare l'overloading)

    Per quanto riguarda il template a due entrate (cio è quello del tuo codice) non saprei proprio dire a che serve.
    "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

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    6

    Re: Re: [C++] Domande notazione e non...

    Quello che ho postato è solo una parte di codice, dopo si spiega il problema del template a due ingressi.

    Però mi sfugge ancora una cosa:

    template <class T>
    void print (T stampa){cout << T;}

    Cioè probabilmente il mio dubbio è stupido ma... la classe T secondo quale logica è definita?
    Il parametro T stampa cosa è?

    Cmq c'è qualche link su i Template... sul libro di testo dell'università non ne parlano minimamente

  4. #4
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    MMM allora...
    I template sono una delle caratteristiche piu' potenti e versatili del C++ che è presente in ben pochi linguaggi di programmazioni orientati agli oggetti. Questo meccanismo consente di specificare in un solo segmento di codice il modello di un vasato inseme di funzioni o di classi correlate.
    Si può scrivere, ad esempio, un template di funzione per l'ordinamento di un array, ordinando al compilatore di generare automaticamente le diverse funzioni della funzione che trattano diversi tipi di dati concreti. In un certo senso i template definiscono funzioni o classi che si possono adattare a diversi tipi di dato.
    Possiamo anche ad esempio ordinare un template di classe che generi una pila, ordinando poi in seguito al compilatore di generare il codice necessario per fare una pila di int, pila di float, di string...
    "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

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423

    Re: Re: Re: [C++] Domande notazione e non...

    Originariamente inviato da beppe86
    Quello che ho postato è solo una parte di codice, dopo si spiega il problema del template a due ingressi.

    Però mi sfugge ancora una cosa:

    template <class T>
    void print (T stampa){cout << T;}

    Cioè probabilmente il mio dubbio è stupido ma... la classe T secondo quale logica è definita?
    Il parametro T stampa cosa è?

    Cmq c'è qualche link su i Template... sul libro di testo dell'università non ne parlano minimamente
    La classe T è definita dinamicamente al momento dell'uso del template. Per esempio, volendo usare un int, scriveresti:
    codice:
    int a;
    print<int>(a);

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    6
    io continuo a non capire in pieno il template... ad esempio:

    #include<iostream>
    using namespace std;

    template<class tipo>
    class uno
    {
    int a;
    public:
    uno(tipo x){a = x;}
    tipo valore(){return a;}
    };

    template<class tipo>
    void f(uno<tipo>& obj, tipo& y)
    {
    y=obj.valore();
    }

    int main()
    {
    int h;
    char c;
    uno<int>obj1(5);
    uno<char>obj2('m');
    f(obj1,h);
    f(obj2,c);
    cout<<h<<endl<<c<<endl;
    system("pause");
    return 0;
    }



    Questo è uno dei programmi che ha dato la profe sul template.
    Io non capisco la classe tipo... cioè che senso ha dichiarare, richiamare e lavorare su una classe che non si sa nemmeno come è fatta e che metodi ha?

    Sicuramente sono io che non ho capito il template... provate ad aiutarmi per favore che l'esame si avvicina

  7. #7
    Utente di HTML.it L'avatar di newbie
    Registrato dal
    Dec 2005
    Messaggi
    299
    Esempio pratico: Supponi di scrivere un'applicazione in cui hai bisogno di una classe "Punto" per contenere le coordinate di un pixel sullo schermo (magari per un programma tipo Paint), le cui coordinate, quindi, saranno *numeri interi*. La classe, presumibilmente, sarebbe

    codice:
    //file Punto.h
    class Punto
    {
        public:
            Punto(int x, int y);  //costruttore
            void Stampa();        //stampa il punto
            (...altri metodi utili...)
        private:
            int x;
            int y;
    };
    Supponi ora di voler scrivere un programma che debba modellare un piano cartesiano vero e proprio (che ne so, un programma di studio di funzioni o simile). Anche in questo caso avresti bisogno di un "Punto", ma le cui coordinate debbano essere *numeri decimali*, diciamo dei float. Se non esistessero i template, dovresti prendere il file "Punto.h" e riadattarlo, sostituendo tutti gli "int" con dei "float". Tutto il resto del codice resterebbe invariato.
    I template ti permettono invece di definire, in questo caso, una classe Punto le cui coordinate sono di un tipo che... decidi tu. In codice, si avrebbe

    codice:
    //definizione classe
    template<class TipoCoord>
    class Punto
    {
        public:
            Punto(TipoCoord x, TipoCoord y);  //costruttore
            void Stampa();        //stampa il punto
        private:
            TipoCoord x;
            TipoCoord y;
    };
    
    //... nel codice in cui si usa...
    Punto<int> p(3, 4);  //punto con coordinate intere
    Punto<float> p(3.5, 7.88); //punto con coordinate decimali
    Un comodissimo esempio di uso dei template sono le classi contenitore STL, coms list, la lista. Se non esistessero i template, avresti listOfInt, listOfFloat, listOfString... tutte con codice quasi identico!
    Cool, eh?

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.