File sorgente
Fa parte della sezione Programmazione orientata agli oggetti del percorso C di Coddy. Lezione 3 di 61.
Finora abbiamo inserito le dichiarazioni delle funzioni nei file header, ma il codice effettivo delle funzioni (la definizione) si trovava nel file principale. Il passo successivo nella programmazione modulare è spostare queste definizioni in file sorgente (.c files).
Questo crea una struttura pulita in tre parti: l’header dichiara le funzioni, un file sorgente separato le definisce e main si limita a usarle. Ecco come appare:
// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H
int add(int a, int b);
#endif
// math_utils.c
#include "math_utils.h"
int add(int a, int b) {
return a + b;
}
// main.c
#include <stdio.h>
#include "math_utils.h"
int main() {
printf("%d\n", add(5, 3));
return 0;
}
Nota che math_utils.c include il proprio file header. Questo garantisce che la definizione della funzione corrisponda alla dichiarazione; se non corrispondono, il compilatore rileverà l’errore. Al file principale basta includere il file header per usare la funzione; non è necessario che sappia come funziona internamente add.
Questa separazione mantiene nascosti i dettagli di implementazione e ti consente di modificare la logica delle funzioni senza toccare i file che utilizzano tali funzioni.
Sfida
FacileCreiamo una semplice utility matematica organizzando il codice nella corretta struttura a tre file: un header per le dichiarazioni, un file sorgente per le implementazioni e un file principale che li usa.
Creerai tre file:
math_ops.h: il tuo file header contenente le dichiarazioni delle funzioni per due operazioni:multiplyesubtract. Entrambe le funzioni accettano due interi e restituiscono un intero. Non dimenticare di includere le protezioni usando il simboloMATH_OPS_H.math_ops.c: il tuo file sorgente contenente le implementazioni effettive dimultiplyesubtract. Questo file dovrebbe includere il proprio header per assicurarsi che le dichiarazioni corrispondano alle definizioni.main.c: il tuo file principale che include l'header e usa entrambe le funzioni per eseguire i calcoli.
La funzione multiply dovrebbe restituire il prodotto di due interi, mentre subtract dovrebbe restituire il primo intero meno il secondo.
Riceverai due valori interi in input: a e b.
Nella funzione main, stampa i risultati di entrambe le operazioni su righe separate:
Product: {result of multiply}
Difference: {result of subtract}Per esempio, con gli input 8 e 3, l'output sarebbe:
Product: 24
Difference: 5Provalo tu
#include <stdio.h>
#include "math_ops.h"
int main() {
int a, b;
scanf("%d", &a);
scanf("%d", &b);
// TODO: Chiama la funzione multiply con a e b e memorizza il risultato
// TODO: Chiama la funzione subtract con a e b e memorizza il risultato
// TODO: Stampa i risultati nel formato:
// Prodotto: {risultato di multiply}
// Differenza: {risultato di subtract}
return 0;
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Programmazione orientata agli oggetti
1Basi di programmazione modulare
File di intestazioneGuardie di inclusioneFile sorgenteFunzioni staticheRipasso: calcolatrice modulare4Incapsulamento
Il concetto di puntatori opachiDefinire struct opacheGetter e setterLa convalida nei setterRiepilogo: scatola segreta2Oggetti e metodi
Le struct come oggettiIl puntatore 'Self'Correttezza constPuntatore o valoreMetodi di supportoRiepilogo: gestore di punti5Progetto: Conto bancario semplice
Configurazione del progettoImplementazione del conto8Polimorfismo
Puntatori a funzione nelle structSimulare i metodiIl concetto di interfacciaImplementare le interfacceIterazione polimorficaRiepilogo: Greeter11Pattern di progettazione in C
Pattern SingletonPattern FactoryPattern IteratorRiepilogo: Factory di Logger3Ciclo di vita degli oggetti
Pattern del costruttorePattern del distruttoreInizializzazione sullo stackCopia profondaRiepilogo: wrapper di stringhe6Ereditarietà tramite composizione
Incorporamento delle structLa regola del primo membroAccesso ai membri della classe baseUpcastingRiepilogo: gerarchia di forme9Progetto: Disegnatore di forme
Panoramica del progettoImplementazione del cerchioImplementazione del rettangoloUtilizzo polimorficoContenitore di formeEsercitati da solo: Compilatore C online