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

    [c++] Separare Implementazione di una classe dalla sua interfaccia

    Salve a tutti, premetto che non so molto di c++ (pochissimo) Sto leggendo il libro di deitel & deitel e sono arrivato verso la fine del 3 capitolo dove si parla di classi.



    A questo punto spiega come separare il codice di una classe creando 2 file distinti:

    Uno che implementa le funzioni membro (file.cpp)
    E l'altro (file.h header) che implementa i prototipi delle funzioni implementate nel file.cpp suscritto


    Volevo capire una cosa Ma se io volessi usare in un altro progetto la su detta classe, per utilizzarla, devo prima compilarla e includere solamente il file.h che in qualche modo poi va a trovare il codice già COMPILATO (e quindi senza file.cpp) oppure devo includere sempre i 2 file.cpp e file.h per implementarla??


    Scusate la mia ignoranza!!

    E grazie a tutti in anticipo Andrea

  2. #2
    Anche nell'altro progetto ti devi portare dietro sia il .h che il .cpp (il .h viene incluso, il .cpp viene compilato e poi il modulo oggetto risultante viene linkato con gli altri); esiste anche la possibilità di creare librerie statiche o dinamiche, ma la questione diventa un po' più complicata.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Ciao MItaly

    Grazie della repentina risposta... Se mi permetti Qui il libro parla di utilizzare questa pratica per mascherare il codice d'implementazione al programmatore che andrà ad utilizzare l'ipotetica classe, ma in questo modo ha sempre la possibilità di vedere l'implementazione aprendo il file.cpp che senso ha??

    Un altra cosa Ma un programma di dimensioni grandi come potrebbe essere autocad o photoshop ( se sono sviluppati in c++ non lo so) il programma si riduce al solo main.cpp e le varie dll come per i piccolissimi programmi che faccio in questo momento io (ad esempio il progetto che avevo postato prima SpaceInvaders) oppure è formato da più file con più main o cosa??

  4. #4
    Originariamente inviato da cataDesign
    Grazie della repentina risposta... Se mi permetti Qui il libro parla di utilizzare questa pratica per mascherare il codice d'implementazione al programmatore che andrà ad utilizzare l'ipotetica classe, ma in questo modo ha sempre la possibilità di vedere l'implementazione aprendo il file.cpp che senso ha??
    Questo è un fraintendimento comune riguardo alla separazione tra interfaccia e implementazione. Le due cose sono separate non per proteggere dalla lettura il codice dell'implementazione, ma per rendere evidente all'utilizzatore cosa è interfaccia (e quindi garantita "per contratto") e cosa è dettaglio implementativo su cui non si deve fare affidamento. È sì possibile sfruttare questa cosa per distribuire solo gli header necessari e il codice già compilato per l'implementazione (sotto forma di librerie statiche o dinamiche), ma è un effetto collaterale.

    Inoltre, la separazione tra .h e .cpp è necessaria per come funziona il modello di compilazione/linking impiegato in C++ - ogni .cpp viene compilato separatamente, ma deve avere già pronte le dichiarazioni dei tipi e delle funzioni impiegate, per cui si includono i .h; alla fine il linker tira le fila delle chiamate a funzioni tra moduli diversi.
    Un altra cosa Ma un programma di dimensioni grandi come potrebbe essere autocad o photoshop ( se sono sviluppati in c++ non lo so) il programma si riduce al solo main.cpp e le varie dll come per i piccolissimi programmi che faccio in questo momento io (ad esempio il progetto che avevo postato prima SpaceInvaders) oppure è formato da più file con più main o cosa??
    Tipicamente avrai un main in un solo file (l'entrypoint dell'applicazione normalmente è uno) e tutto il resto è diviso tra vari .cpp (e corrispondenti header), in modo da raggruppare assieme funzioni/classi relative alla medesima funzionalità e diminuire i tempi di compilazione - se pensi che una suite come LibreOffice può richiedere ore per essere compilata da zero, capisci come sia fondamentale poter ricompilare giusto il .cpp modificato (e rieffettuare giusto il linking) ed evitare di dover perdere le ore per ogni modifica.
    Spesso poi per funzionalità condivise da vari eseguibili si fa uso di librerie dinamiche, che vengono compilate a parte.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Perfetto domanda completa grazie mille (Scusami se rispondo solo adesso ma ho avuto alcune cose da fare questi ultimi 3 giorni)

  6. #6
    Amaro C++, il gusto pieno dell'undefined behavior.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.