Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di xshell
    Registrato dal
    Apr 2008
    Messaggi
    157

    [C++] Prototipi diversi con lo stesso nome...

    Buonasera.

    Ho due dubbi riguardo a questo codice:

    codice:
    class NomeClasse;
    
    typedef unsigned int nometipo;
    
    class NomeClasse
    {
    public:
    
        //Inizializzazione
        Prototipo();
        Prototipo(char c);
        Prototipo(char c, int i);
        Prototipo(const char *str);
        ...
    }
    I miei dubbi sono:

    1. Non capisco perché nell'esempio venga scritto "class NomeClasse;" all'inizio... a che serve? A caricare i typedef? Serve per "pre-caricare la classe"? E per quale motivo?

    2. Nell'inizializzazione della classe mi ritrovo con dei prototipi con lo stesso nome ma che accettano argomenti diversi... quello che non capisco è: come fa il compilatore a non confondersi? "Acchiappa" al volo il prototipo che accetta gli argomenti come quelli che gli sono stati passati? Oppure serve a qualche altra cosa che non sò?

    Grazie in anticipo.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: [C++] Prototipi diversi con lo stesso nome...

    Originariamente inviato da xshell
    1. ...
    In questo esempio specifico, non serve a nulla.

    Ma, nel caso di programmi complessi con molti file, i vari include possono richiedere una predichiarazione della classe con quella linea ...

    2. ...
    L' overload e' una caratteristica fondamentale della programmazione OOP (e del C++).

    In questo caso l'overload e' dei costruttori. Ne esistono tanti, diversi per i parametri che accettano. Il compilatore semplicemente controlla il numero e il tipo dei parametri prima di decidere quale usare (non "al volo", ma a "compile time").
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di xshell
    Registrato dal
    Apr 2008
    Messaggi
    157

    Re: Re: [C++] Prototipi diversi con lo stesso nome...

    Originariamente inviato da oregon
    In questo esempio specifico, non serve a nulla.

    Ma, nel caso di programmi complessi con molti file, i vari include possono richiedere una predichiarazione della classe con quella linea ...
    Non ho inserito tutto il codice perché è lungo, però ho provato a compilare il codice con Visual Studio togliendo quella linea e gli errori che mi segnala riguardano i vari typedef successivi... che definiscono tipi utilizzati nella classe. Gli include sono <cstring>, <climits>, <vector> e <cstdlib>... quindi non credo che le funzioni in essi contenute abbiano bisogno di un precaricamento della classe...

    Originariamente inviato da oregon
    L' overload e' una caratteristica fondamentale della programmazione OOP (e del C++).

    In questo caso l'overload e' dei costruttori. Ne esistono tanti, diversi per i parametri che accettano. Il compilatore semplicemente controlla il numero e il tipo dei parametri prima di decidere quale usare (non "al volo", ma a "compile time").
    Questo più o meno lo immaginavo, anche se avevo bisogno di una conferma. Quindi sarà il compilatore che deciderà quale costruttore utilizzare in base all'occorrenza, giusto?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: Re: Re: [C++] Prototipi diversi con lo stesso nome...

    Originariamente inviato da xshell
    Non ho inserito tutto il codice perché è lungo
    Ma e' solo vedendo tutto il codice che si capisce il problema ...

    Gli errori che manifesta un compilatore possono essere molto fuorvianti, specialmente quelli successivi al primo e possono non avere nulla a che fare con il vero problema.

    Esamina attentamente il primo errore.

    Questo più o meno lo immaginavo ...
    Non andare per "suggerimenti" su questi argomenti ... leggi un buon libro e dedica un po' di tempo alle teoria ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it L'avatar di xshell
    Registrato dal
    Apr 2008
    Messaggi
    157

    Re: Re: Re: Re: [C++] Prototipi diversi con lo stesso nome...

    Originariamente inviato da oregon
    Ma e' solo vedendo tutto il codice che si capisce il problema ...

    Gli errori che manifesta un compilatore possono essere molto fuorvianti, specialmente quelli successivi al primo e possono non avere nulla a che fare con il vero problema.

    Esamina attentamente il primo errore.
    Il codice è siffatto:

    1. Inclusioni file di intestazione della biblioteca standard C++
    2. Predichiarazione classe
    3. Typedef per tre tipi
    4. Definizione classe

    (Il file è un header che definisce una classe per la gestione di testo in un parser Python)

    Se elimino il punto 2, tutti gli errori che il compilatore mi segnala si riferiscono ai tipi di dato non definiti dai typedef (come se i typedef immediatamente successivi alla predichiarazione della classe fossero stati ignorati). Ad esempio:


    Error 1:
    error C4430: missing type specifier - int assumed.
    Note: C++ does not support default int
    Error 2:
    error C2143: syntax error : missing ';' before '&'
    Error 3
    error C2530: 'RCString' : references must be initialized
    ...

    (Gli altri errori sono identici)... RCString ad esempio è un tipo di dato definito da typedef

    Originariamente inviato da oregon
    Non andare per "suggerimenti" su questi argomenti ... leggi un buon libro e dedica un po' di tempo alle teoria ...
    Saggio consiglio. Ho letto un libro, Fondamenti di Programmazione C++, Deitel & Deitel, e anche qualche cosa sul C, ma purtroppo l'ho fatto alcuni anni fa e io ho una memoria abbastanza labile: adesso avrei dovuto rileggere tutto, ma ho preferito andare in cerca di codici, anche complessi, per esaminarli da cima a fondo, aiutandomi col libro (anche se non riesco a trovare tutto).


    ----------------------------------

    Non vorrei sfruttare troppo la tua grande disponibilità, ma ho un'ultima curiosità: perché è necessario utilizzare semplici typedef solo per cambiare nome ad un tipo già esistente? Come il size_t definito in cstring...

    typedef unsigned int size_t;

    Qual'è il vantaggio?

    Grazie ancora.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: Re: Re: Re: Re: [C++] Prototipi diversi con lo stesso nome...

    Originariamente inviato da xshell
    Il codice è siffatto:
    Ascolta ... non so perche' tu non voglia mostrare il codice ma senza vederlo, non si puo' dire molto ...

    perché è necessario utilizzare semplici typedef solo per cambiare nome ad un tipo già esistente? Come il size_t definito in cstring...

    typedef unsigned int size_t;
    Beh, leggi questo

    http://www.disi.unige.it/person/DoderoG/LP/typed.htm
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it L'avatar di xshell
    Registrato dal
    Apr 2008
    Messaggi
    157

    Re: Re: Re: Re: Re: Re: [C++] Prototipi diversi con lo stesso nome...

    Originariamente inviato da oregon
    Beh, leggi questo

    http://www.disi.unige.it/person/DoderoG/LP/typed.htm
    Grazie

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.