functions c with types examples
Tipi di funzioni in C ++ insieme ai loro usi.
Nei nostri tutorial precedenti fino ad ora, abbiamo visto i vari concetti in C ++ come variabili, classi di archiviazione, operatori, array, stringhe, ecc.
In questo tutorial andremo avanti e discuteremo il concetto di funzioni. Le funzioni sono anche chiamate metodi, subroutine o procedure.
=> Leggi qui la vasta serie di tutorial di formazione C ++.
Cosa imparerai:
- Come definiamo una funzione?
- Tipi di funzioni in C ++
- Dichiarazione di funzione
- Definizione di funzione
- Chiamare una funzione
- Parametri formali ed effettivi
- Valori restituiti
- Funzioni vuote
- Passaggio di parametri alle funzioni
- Parametri predefiniti
- Parametri cost
- Funzioni inline
- Utilizzo di strutture nelle funzioni
- Conclusione
- Lettura consigliata
Come definiamo una funzione?
Una funzione è un insieme di istruzioni che vengono messe insieme per eseguire un'attività specifica. Può essere dichiarazioni che eseguono alcune attività ripetute o dichiarazioni che eseguono alcune attività speciali come la stampa, ecc.
Un utilizzo dell'avere funzioni è semplificare il codice suddividendolo in unità più piccole chiamate funzioni. Un'altra idea dietro l'utilizzo delle funzioni è che ci evita di scrivere lo stesso codice ancora e ancora. Dobbiamo solo scrivere una funzione e poi chiamarla come e quando necessario senza dover scrivere lo stesso insieme di istruzioni ancora e ancora.
Tipi di funzioni in C ++
In C ++, abbiamo due tipi di funzioni come mostrato di seguito.
Funzioni integrate
Le funzioni incorporate sono anche chiamate funzioni di libreria. Queste sono le funzioni fornite da C ++ e non è necessario scriverle da soli. Possiamo usare direttamente queste funzioni nel nostro codice.
Queste funzioni si trovano nei file di intestazione di C ++. Per esempio ,, sono le intestazioni che hanno rispettivamente funzioni matematiche integrate e funzioni di stringa.
Vediamo un esempio di utilizzo di funzioni incorporate in un programma.
#include #include using namespace std; int main() { string name; cout << 'Enter the input string:'; getline (std::cin, name); cout << 'String entered: ' << name << '!
'; int size = name.size(); cout<<'Size of string : '< Produzione:
Immettere la stringa di input: Guida al test del software
Stringa inserita: Guida al test del software!
Dimensioni della corda: 21
Qui stiamo usando le intestazioni e. I tipi di dati e altre funzioni di input / output sono definiti nella libreria. Le funzioni stringa usate come getline, size sono una parte dell'intestazione.
Funzioni definite dall'utente
Il C ++ consente inoltre ai suoi utenti di definire le proprie funzioni. Queste sono le funzioni definite dall'utente. Possiamo definire le funzioni ovunque nel programma e quindi chiamare queste funzioni da qualsiasi parte del codice. Proprio come le variabili, dovrebbe essere dichiarato prima dell'uso, anche le funzioni devono essere dichiarate prima di essere chiamate.
domande e risposte dell'intervista sql per le matricole
Parliamo in dettaglio delle funzioni definite dall'utente.
La sintassi generale per le funzioni definite dall'utente (o semplicemente le funzioni) è la seguente:
return_type functionName(param1,param2,….param3) { Function body; }
Quindi, come mostrato sopra, ogni funzione ha:
- Tipo di ritorno: È il valore che le funzioni restituiscono alla funzione chiamante dopo aver eseguito un'attività specifica.
- functionName : Identificatore utilizzato per denominare una funzione.
- Elenco dei parametri: Denotato da param1, param2,… paramn nella sintassi precedente. Questi sono gli argomenti che vengono passati alla funzione quando viene effettuata una chiamata di funzione. L'elenco dei parametri è facoltativo, ovvero possiamo avere funzioni che non hanno parametri.
- Corpo della funzione: Un gruppo di dichiarazioni che svolgono un compito specifico.
Come già accennato, dobbiamo 'dichiarare' una funzione prima di usarla.
Dichiarazione di funzione
Una dichiarazione di funzione indica al compilatore il tipo di funzione restituito, il numero di parametri utilizzati dalla funzione e i suoi tipi di dati. Includendo i nomi dei parametri nella funzione, la dichiarazione è facoltativa. La dichiarazione di funzione viene anche chiamata come prototipo di funzione.
Abbiamo fornito alcuni esempi della dichiarazione di funzione di seguito per riferimento.
int sum(int, int);
La dichiarazione di cui sopra è di una funzione 'somma' che accetta due numeri interi come parametri e restituisce un valore intero.
void swap(int, int);
Ciò significa che la funzione di scambio accetta due parametri di tipo int e non restituisce alcun valore e quindi il tipo restituito è void.
void display();
La visualizzazione della funzione non accetta alcun parametro e inoltre non restituisce alcun tipo.
Definizione di funzione
Una definizione di funzione contiene tutto ciò che contiene una dichiarazione di funzione e inoltre contiene anche il corpo della funzione racchiuso tra parentesi graffe ({}).
Inoltre, dovrebbe avere anche parametri denominati. Quando la funzione viene chiamata, il controllo del programma passa alla definizione della funzione in modo che il codice della funzione possa essere eseguito. Quando l'esecuzione della funzione è terminata, il controllo torna al punto in cui è stata chiamata la funzione.
Per la dichiarazione di cui sopra della funzione di scambio, la definizione è la seguente:
void swap(int a, int b){ b = a + b; a = b - a; b = b - a; }
Nota che la dichiarazione e la definizione di una funzione possono andare insieme. Se definiamo una funzione prima di fare riferimento ad essa, non è necessaria una dichiarazione separata.
Prendiamo un esempio di programmazione completo per dimostrare una funzione.
#include using namespace std; void swap(int a, int b) { //here a and b are formal parameters b = a + b; a = b - a; b = b - a; cout<<'
After swapping: '; cout<<'a = '< Nella funzione main, leggiamo due interi e poi chiamiamo la funzione di scambio passandole questi due interi. Nella funzione di scambio, i due numeri interi vengono scambiati utilizzando una logica standard e vengono stampati i valori scambiati.
Chiamare una funzione
Quando abbiamo una funzione nel nostro programma, a seconda del requisito dobbiamo chiamare o invocare questa funzione. Solo quando la funzione viene chiamata o invocata, la funzione eseguirà il suo insieme di istruzioni per fornire i risultati desiderati.
La funzione può essere chiamata da qualsiasi punto del programma. Può essere richiamato dalla funzione principale o da qualsiasi altra funzione se il programma utilizza più di una funzione. La funzione che chiama un'altra funzione è chiamata 'Funzione di chiamata'.
Nell'esempio precedente di scambio di numeri, la funzione di scambio viene chiamata nella funzione principale. Quindi la funzione principale diventa la funzione chiamante.
Parametri formali ed effettivi
Abbiamo già visto che possiamo avere parametri per le funzioni. I parametri della funzione sono forniti nella definizione della funzione come un elenco di parametri che segue il nome della funzione. Quando la funzione viene chiamata dobbiamo passare i valori effettivi di questi parametri in modo che utilizzando questi valori effettivi la funzione possa svolgere il suo compito.
Vengono chiamati i parametri definiti nella definizione della funzione Parametri formali . Vengono chiamati i parametri nella chiamata di funzione che sono i valori effettivi Parametri effettivi.
Nell'esempio precedente di scambio di numeri, abbiamo scritto i commenti per i parametri formali ed effettivi. Nella funzione chiamante, ad esempio main, il valore di due numeri interi viene letto e passato alla funzione di scambio. Questi sono i parametri effettivi.
Possiamo vedere le definizioni di questi parametri nella prima riga della definizione della funzione. Questi sono i parametri formali.
Notare che il tipo di argomenti formali ed effettivi devono corrispondere. Anche l'ordine dei parametri formali e effettivi dovrebbe corrispondere.
Valori restituiti
Una volta che la funzione esegue il compito previsto, dovrebbe restituire il risultato alla funzione chiamante. Per questo, abbiamo bisogno del tipo di ritorno della funzione. La funzione può restituire un singolo valore alla funzione chiamante. Il tipo restituito della funzione viene dichiarato insieme al prototipo della funzione.
Facciamo un esempio di aggiunta di due numeri per dimostrare i tipi di restituzione.
#include using namespace std; int sum(int a, int b){ return (a+b); } int main() { int a, b, result; cout<>a>>b; result = sum(a,b); cout<<'
Sum of the two numbers : '< Produzione:
Immettere i due numeri da aggiungere: 11 11
Somma dei due numeri: 22
Nell'esempio sopra, abbiamo una funzione somma che accetta due parametri interi e restituisce un tipo intero. Nella funzione main, leggiamo due numeri interi dall'input della console e li passiamo alla funzione sum. Poiché il tipo restituito è un numero intero, abbiamo una variabile di risultato su LHS e RHS è una chiamata di funzione.
Quando viene eseguita una funzione, l'espressione (a + b) restituita dalla funzione sum viene assegnata alla variabile risultato. Questo mostra come viene utilizzato il valore di ritorno della funzione.
Funzioni vuote
Abbiamo visto che la sintassi generale della funzione richiede la definizione di un tipo restituito. Ma se nel caso in cui abbiamo una funzione del genere che non restituisce alcun valore, in quel caso cosa specifichiamo come tipo di ritorno? La risposta è che utilizziamo il tipo 'void' senza valore per indicare che la funzione non restituisce un valore.
In tal caso la funzione è chiamata 'funzione void' e il suo prototipo sarà simile
void functionName (param1, param2,… .param 3);
Nota : È considerata una buona pratica includere una dichiarazione 'reso'; alla fine della funzione void per chiarezza.
Passaggio di parametri alle funzioni
Abbiamo già visto il concetto di parametri effettivi e formali. Sappiamo anche che i parametri effettivi passano i valori a una funzione ricevuta dai parametri di formato. Questo è chiamato passaggio di parametri.
In C ++, abbiamo alcuni modi per passare i parametri come discusso di seguito.
Passa per valore
Nel programma per scambiare due interi di cui abbiamo discusso in precedenza, abbiamo visto che leggiamo semplicemente gli interi 'a' e 'b' in main e li passiamo alla funzione di scambio. Questa è la tecnica del passaggio per valore.
Nella tecnica di passaggio per valore del passaggio di parametri, le copie dei valori dei parametri effettivi vengono passate ai parametri formali. A causa di ciò, i parametri effettivi e formali vengono memorizzati in diverse posizioni di memoria. Pertanto, le modifiche apportate ai parametri formali all'interno della funzione non si riflettono all'esterno della funzione.
Possiamo capirlo meglio visitando ancora una volta lo scambio di due numeri.
#include using namespace std; void swap(int a, int b) { //here a and b are formal parameters b = a + b; a = b - a; b = b - a; cout<<'
After swapping inside Swap:
'; cout<<'a = '< a = 2 b = 3
Dopo lo scambio all'interno di Main:
a = 3 b = 2 Abbiamo semplicemente modificato il programma precedente per stampare i valori dei parametri formali e dei parametri effettivi prima e dopo la chiamata alla funzione.
Come visto dall'output, passiamo inizialmente i valori a = 3 eb = 2. Questi sono i parametri effettivi. Quindi, dopo lo scambio all'interno della funzione di scambio, vediamo che i valori sono effettivamente scambiati e a = 2 eb = 3.
Tuttavia, dopo la chiamata alla funzione swap, nella funzione main, i valori di aeb sono ancora 3 e 2 rispettivamente. Questo perché i parametri effettivi passati alla funzione dove ha una copia delle variabili. Pertanto, sebbene i parametri formali siano stati scambiati nella funzione di scambio, non sono stati rispecchiati.
Sebbene la tecnica del passaggio per valore sia la più basilare e ampiamente utilizzata, a causa della limitazione di cui sopra, possiamo usarla solo nei casi in cui non richiediamo alla funzione di modificare i valori nel chiamare la funzione.
Passa per riferimento
Il passaggio per riferimento è un'altra tecnica utilizzata da C ++ per passare i parametri alle funzioni. In questa tecnica, invece di passare copie dei parametri effettivi, passiamo riferimenti ai parametri effettivi.
Nota: I riferimenti non sono altro che alias di variabili o in parole semplici, è un altro nome che viene dato a una variabile. Quindi una variabile e il suo riferimento condividono la stessa posizione di memoria. Impareremo i riferimenti in dettaglio nel nostro successivo tutorial.
Nella tecnica di passaggio per riferimento, utilizziamo questi riferimenti di parametri effettivi e, di conseguenza, le modifiche apportate ai parametri formali nella funzione vengono riflesse nella funzione chiamante.
Modifichiamo la nostra funzione di scambio affinché i nostri lettori comprendano meglio il concetto.
#include #include using namespace std; void swap(int &a, int &b){ int temp = a; a = b; b = temp; } int main() { int a,b; cout<>a>>b; cout<<'a = '< a = 50 b = 25 Nota: la tecnica del passaggio per riferimento mostrata nell'esempio precedente. Possiamo vedere che i parametri effettivi vengono passati così come sono. Ma aggiungiamo un carattere '&' ai parametri formali che indica che si tratta di un riferimento che stiamo utilizzando per questo particolare parametro.
Quindi le modifiche apportate ai parametri formali nella funzione di scambio si riflettono nella funzione principale e otteniamo i valori scambiati.
Passa accanto a Pointer
In C ++, possiamo anche passare parametri alla funzione usando variabili puntatore. La tecnica del puntatore passante produce gli stessi risultati di quella del passaggio per riferimento. Ciò significa che sia i parametri formali che quelli effettivi condividono le stesse posizioni di memoria e le modifiche apportate alla funzione si riflettono nella funzione chiamante.
L'unica differenza è che in un passaggio per riferimento ci occupiamo di riferimenti o alias di parametri mentre in una tecnica di passaggio per puntatore utilizziamo variabili puntatore per passare i parametri.
Le variabili puntatore differiscono con i riferimenti in cui le variabili puntatore puntano a una particolare variabile e, a differenza dei riferimenti, possiamo cambiare la variabile a cui punta. Esploreremo i dettagli del puntatore nei nostri successivi tutorial.
Presentiamo nuovamente lo scambio di due numeri interi per dimostrare la tecnica Pass by Pointer.
#include #include using namespace std; void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } int main() { int a,b; cout<>a>>b; cout<<'a = '< a = 54 b = 23 Quindi, come già detto, non c'è differenza nell'output del programma. L'unica differenza è nel modo in cui vengono passati i parametri. Possiamo notare che i parametri formali qui sono variabili puntatore.
Parametri predefiniti
In C ++, possiamo fornire valori predefiniti per i parametri delle funzioni. In questo caso, quando invochiamo la funzione, non specifichiamo parametri. La funzione accetta invece i parametri predefiniti forniti nel prototipo.
Il seguente esempio dimostra l'uso dei parametri predefiniti.
#include #include using namespace std; int mathoperation(int a, int b = 3, int c = 2){ return ((a*b)/c); } int main() { int a,b,c; cout<>a>>b>>c; cout< Produzione:
Immettere i valori per a, bec: 10 4 6
Chiama operazione matematica con 1 arg: 15
Chiama operazione matematica con 2 arg: 20
Chiama operazione matematica con 3 arg: 6
Come mostrato nell'esempio di codice, abbiamo una funzione 'mathoperation' che accetta tre parametri dai quali abbiamo fornito valori predefiniti per due parametri. Quindi nella funzione principale, chiamiamo questa funzione tre volte con un elenco di argomenti diverso.
La prima chiamata è con un solo argomento. In questo caso, gli altri due argomenti avranno valori predefiniti. La chiamata successiva è con due argomenti. In questo caso, il terzo argomento avrà un valore predefinito. La terza chiamata è con tre argomenti. In questo caso, poiché abbiamo fornito tutti e tre gli argomenti, i valori predefiniti verranno ignorati.
Tieni presente che, pur fornendo i parametri predefiniti, partiamo sempre dal parametro più a destra. Inoltre, non possiamo saltare un parametro intermedio e fornire un valore predefinito per il parametro successivo.
Passiamo ora ad alcuni concetti relativi a funzioni speciali che sono importanti dal punto di vista di un programmatore.
Parametri cost
Possiamo anche passare parametri costanti alle funzioni utilizzando la parola chiave 'const'. Quando un parametro o un riferimento è const, non può essere modificato all'interno della funzione.
Notare che non possiamo passare un parametro const a un parametro formale non const. Ma possiamo passare parametri const e non const a un parametro formale const.
Allo stesso modo, possiamo anche avere un tipo di ritorno const. Anche in questo caso non è possibile modificare il tipo di ritorno.
Vediamo un esempio di codice che utilizza riferimenti const.
#include #include using namespace std; int addition(const int &a, const int &b){ return (a+b); } int main() { int a,b; cout<>a>>b; cout<<'a = '< Produzione:
Immettere i due numeri da scambiare: 22 33
a = 2 b = 33
Risultato dell'aggiunta: 55
Nel programma sopra, abbiamo parametri formali const. Nota che i parametri effettivi sono normali variabili non const che abbiamo passato con successo. Poiché i parametri formali sono const, non possiamo modificarli all'interno della funzione. Quindi eseguiamo semplicemente l'operazione di addizione e restituiamo il valore.
Se proviamo a modificare i valori di aob all'interno della funzione, il compilatore emetterà un errore.
Funzioni inline
Sappiamo che per effettuare una chiamata di funzione, internamente coinvolge un compilatore che memorizza lo stato del programma su uno stack prima di passare il controllo alla funzione.
Quando la funzione ritorna, il compilatore deve recuperare lo stato del programma e continuare da dove era partito. Questo pone un sovraccarico. Quindi, in C ++ ogni volta che abbiamo una funzione composta da poche istruzioni, c'è una funzione che le consente di espandersi in linea. Questo viene fatto creando una funzione inline.
Quindi le funzioni inline sono le funzioni che vengono espanse in fase di esecuzione, risparmiando gli sforzi per chiamare la funzione e apportare le modifiche allo stack. Ma anche se creiamo una funzione come inline, il compilatore non garantisce che verrà espansa in fase di esecuzione. In altre parole, è completamente dipendente dal compilatore rendere la funzione inline o meno.
Alcuni compilatori rilevano funzioni più piccole e le espandono inline anche se non sono dichiarate inline.
Di seguito è riportato un esempio di una funzione inline.
inline int addition(const int &a,const int &b){ return (a+b); }
Come mostrato sopra, precediamo la definizione della funzione con una parola chiave 'inline' per rendere una funzione inline.
Utilizzo di strutture nelle funzioni
Possiamo passare variabili di struttura come parametri per funzionare in un modo simile in cui passiamo variabili ordinarie come parametri.
Ciò è mostrato nel seguente esempio.
#include #include using namespace std; struct PersonInfo { int age; char name(50); double salary; }; void printStructInfo(PersonInfo p) { cout<<'PersonInfo Structure:'; cout<<'
Age:'< p.age; cout <> p.salary; printStructInfo(p); }
Produzione:
Immettere il nome: Vedang
Inserisci l'età: 22 anni
Inserisci stipendio: 45000,00
Struttura PersonInfo:
Età: 22
Nome: Vedang
Stipendio: 45000

Come mostrato nel programma precedente, passiamo una struttura a funzionare in modo simile alle altre variabili. Leggiamo i valori per i membri della struttura dallo standard input e quindi passiamo una struttura a una funzione che visualizza la struttura.
Conclusione
Riguardava le basi delle funzioni in C ++.
Esploreremo di più sulle funzioni statiche in C ++ nei nostri prossimi tutorial.
=> Controlla qui la serie completa di formazione GRATUITA C ++.
Lettura consigliata
- Funzioni Python
- Funzioni di data e ora in C ++ con esempi
- Funzioni di script di shell Unix con parametri e ritorno
- Tutorial Python DateTime con esempi
- Funzioni importanti di LoadRunner utilizzate negli script VuGen con esempi
- Funzioni stringa Python
- Tutorial sulle funzioni principali di Python con esempi pratici
- Funzioni Friend in C ++