File di intestazione della funzione di classe vs C ++

0

Sto usando C ++ per implementare un progetto che richiede di importare un file una volta. Tutti i dati in questo file devono essere portati in memoria come coppie di valori chiave, ma solo quando il file viene importato.

Poiché questa operazione è una tantum, non mi sembra che richieda una lezione. Ma non so dove mettere una funzione che gestisce questo file. Dovrei definire un file di intestazione chiamato helper_functions.h contenente questo e altri metodi (salvando il file una volta terminato il programma)?

    
posta Ayush Gupta 23.03.2016 - 08:00
fonte

2 risposte

3

L'uso di una classe per una funzionalità che viene utilizzata una sola volta in un programma può essere utile, se la si guarda da una prospettiva di coerenza e organizzazione del codice. Quindi, la frequenza con cui viene eseguita un'operazione non dovrebbe essere l'unica considerazione quando si decide di creare una classe o meno.

Indipendentemente dal fatto che si scelga di creare una classe per questa funzione o meno, le funzioni / classe che formano l'interfaccia della funzione devono trovarsi in un file di intestazione chiamato dopo la funzione.
Per le classi, questo è solitamente ovvio perché la classe sarà anche chiamata dopo la funzione. Per le funzioni autonome questo potrebbe essere meno ovvio, ma è bene usare la stessa logica nel decidere il file di intestazione per inserire le funzioni.
Il ragionamento qui è che sarà più facile scoprire quali funzioni / classi sono disponibili in relazione alla feature X.

    
risposta data 23.03.2016 - 08:51
fonte
0

Non sappiamo quale sia il file o i dati che stai "importando".

Forse hai bisogno di un lexer e / o parser per fare quella importazione.

Forse potresti utilizzare un formato esistente, ad es. JSON (per cui ci sono buone librerie C ++, come jsoncpp ...)

La decisione di fare (o meno) una classe - e che a volte è questione di gusti e abitudini - non è correlata all'importazione di file. potresti avere una classe non appena avrai dati con le funzioni membro che operano su di essa. Ma (contrariamente a Java) non tutto deve essere di classe (o una gerarchia di essi). Leggi anche i tipi di dati astratti (che potrebbero essere implementati come una o più classi). Capisci anche qual è la relazione tra struct & class in C ++.

Studia alcuni software gratuito codice relativi al tuo progetto. Potrebbe ispirarti .

BTW, un file di intestazione C ++ può, e spesso lo fa, dichiarare più di un class e potrebbe anche definire alcune funzioni static inline e operator e alcune enum o constexpr ecc. Molti progetti di piccole dimensioni (per esempio di meno di centomila righe) hanno un singolo file di intestazione (che potrebbe essere < a href="https://en.wikipedia.org/wiki/Precompiled_header"> precompilato e che avrebbe #include di altre intestazioni di sistema o di libreria e #define di alcune macro).

Nota anche che i contenitori standard C ++ preferiscono trattare con le classi, e sarà meglio che tu sappia regola di cinque & RAII idioma. Se vuoi una cosa simile a Redis, potresti essere interessato a std :: map e / o std :: unordered_map ecc ... e questi contenitori vogliono davvero le classi per i loro contenuti (es. chiavi e valori) .

Comprendi che una classe C ++ costa poco. La sua istanza di solito ha qualche vtable che generalmente costa solo un puntatore nascosto per istanza.

    
risposta data 23.03.2016 - 09:08
fonte

Leggi altre domande sui tag