Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C++] Lista all'interno di una classe

    Salve a tutti.
    Vorrei porvi una domanda: per il lavoro che devo svolgere, mi hanno consigliato di utilizzare una lista all'interno di una classe, la quale, poi, dev'essere utilizzata dal main.
    Potete spiegarmi perchè è conveniente inserire una lista all'interno della classe? O, se non è conveniente, quali sono i pro e i contro? Grazie.

  2. #2
    Be', tutto dipende da cosa deve fare la tua classe... se rappresenta un qualcosa che "possiede" i dati contenuti nella lista è normale che la lista sia un suo membro.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Originariamente inviato da MItaly
    Be', tutto dipende da cosa deve fare la tua classe... se rappresenta un qualcosa che "possiede" i dati contenuti nella lista è normale che la lista sia un suo membro.
    In primis, grazie per la risposta.
    La mia classe deve, praticamente, gestire una lista di indirizzi IP (letti da un file esterno), prelevarne 4 alla volta (quindi ho una lista generica, da implementare fuori dalla classe (vero?), e una lista "specifica", formata dai soli 4 indirizzi IP), e per ogni IP deve effettuare delle operazioni.
    Salvare i risultati, e rieffettuare le operazioni con nuovi indirizzi IP.

    Per richiamarla, utilizzando le STL, posso richiamarla come se sia una normale funzione membro?
    Quindi nomeoggetto.nomefunzionemembro?

  4. #4
    Originariamente inviato da Gallagher
    La mia classe deve, praticamente, gestire una lista di indirizzi IP (letti da un file esterno), prelevarne 4 alla volta (quindi ho una lista generica, da implementare fuori dalla classe (vero?), e una lista "specifica", formata dai soli 4 indirizzi IP), e per ogni IP deve effettuare delle operazioni.
    Salvare i risultati, e rieffettuare le operazioni con nuovi indirizzi IP.

    Per richiamarla, utilizzando le STL, posso richiamarla come se sia una normale funzione membro?
    Quindi nomeoggetto.nomefunzionemembro?
    perchè una generica da implementare fuori dalla classe ed una specifica con 4 indirizzi?
    io metterei la lista come membro della classe, ed implementerei un metodo che prende 4 indirizzi alla volta, utilizzando un intero per "ricordarmi" dove sono arrivato nell'analizzare la lista

    codice:
    #ifndef GESTOREINDIRIZZI_H
    #define GESTOREINDIRIZZI_H
    
    #include <list>
    
    class IndirizzoIp;      //<- da implementare, oppure fai una struct, o passi questi dati in qualsiasi altro modo
    
    class GestoreIndirizzi
    {
    public:
        GestoreIndirizzi() {_lastIndx=0;}
    
        void init_lista();                       //inizializzi la lista inserendo i dati che ti servono
        void operazioniSuTuttiGliIp()
        {
            _lastIndx = 0;
            //chiami n volte preleva_quattroIp()
        }
    
    private:
        void preleva_quattroIp()
        {
            //usi _lastIndx per sapere da dove partire per prendere il tuo Ip dalla lista
            //e chiami 4 volte operazioniSuUnIndirizzo(const IndirizzoIp& ip);
        }
        void operazioniSuUnIndirizzo(const IndirizzoIp& ip)
        {
            //fai le operazioni sul tuo indirizzo e salvi i risultati
        }
    
        std::list<IndirizzoIp> _myList;
        unsigned int _lastIndx;
    };
    
    #endif // GESTOREINDIRIZZI_H

  5. #5
    Originariamente inviato da MegaAlchimista
    perchè una generica da implementare fuori dalla classe ed una specifica con 4 indirizzi?
    io metterei la lista come membro della classe, ed implementerei un metodo che prende 4 indirizzi alla volta, utilizzando un intero per "ricordarmi" dove sono arrivato nell'analizzare la lista

    codice:
    #ifndef GESTOREINDIRIZZI_H
    #define GESTOREINDIRIZZI_H
    
    #include <list>
    
    class IndirizzoIp;      //<- da implementare, oppure fai una struct, o passi questi dati in qualsiasi altro modo
    
    class GestoreIndirizzi
    {
    public:
        GestoreIndirizzi() {_lastIndx=0;}
    
        void init_lista();                       //inizializzi la lista inserendo i dati che ti servono
        void operazioniSuTuttiGliIp()
        {
            _lastIndx = 0;
            //chiami n volte preleva_quattroIp()
        }
    
    private:
        void preleva_quattroIp()
        {
            //usi _lastIndx per sapere da dove partire per prendere il tuo Ip dalla lista
            //e chiami 4 volte operazioniSuUnIndirizzo(const IndirizzoIp& ip);
        }
        void operazioniSuUnIndirizzo(const IndirizzoIp& ip)
        {
            //fai le operazioni sul tuo indirizzo e salvi i risultati
        }
    
        std::list<IndirizzoIp> _myList;
        unsigned int _lastIndx;
    };
    
    #endif // GESTOREINDIRIZZI_H
    Wow, sei stato gentilissimo davvero!
    Credo che e' proprio quello di cui ho bisogno..
    Avevo solo una domanda da chiederti.. la funzione membro OperazionisututtigliIP() che cosa dovrebbe fare esattamente?

    Perche', per la "mia" logica ( ) devo praticamente leggere questa lista di X IP (20,30, 100, ecc), settare un indirizzo specifico come "predominante" (il primo di questa lista) e poi effettuare la stessa operazione su tutti gli altri indirizzi IP, ma 4 alla volta!
    Quindi dovrei modificare la tua funzione di "operazioniSuUnIndirizzo" con "operazioniSu4indirizzi" dove effettuare le mie operazioni (PERO' le mie operazioni sono effettuate da metodi e funzioni di una classe ESTERNA a questa di GestoreIndirizzi) e salvare i risultati;
    modificare il tuo "preleva_quattro_ip" utilizzando appunto lastindex per indicare da "dove partire" e richiamre "operazionisu4indirizzi";
    Ed invece "operazionisututtigliIP()?
    Grazie mille

  6. #6
    a sto punto elimini il metodo preleva_quattroIp().
    Io pensavo di fare le operazioni di base su ogni indirizzo in operazioniSuUnIndirizzo(ip), e quindi sul gruppo di 4 in preleva_quattroIp(), che avrebbe usato al suo interno operazioniSuUnIndirizzo(ip).

    Il succo del discorso era: esegui la tua logica di base su un (o più) metodo privato, e poi lo chiami nVolte in un metodo publico (in questo caso operazioniSuTuttiGliIp() ) che esegue tutto il lavoro che c'è da fare.
    Nel caso specifico il numero di volte sarà la lunghezza della lista /4 approssimato per eccesso

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.