logo

typedef in C++

La parola chiave typedef in C++ viene utilizzata per creare alias tipi di dati esistenti, tipi di dati definiti dall'utente e puntatori a un nome più significativo. Le typedef ti consentono di assegnare nomi descrittivi ai tipi di dati standard, il che può anche aiutarti a documentare autonomamente il tuo codice. Per lo più i typedef vengono utilizzati per l'aliasing, solo se il nome predefinito è troppo lungo o complesso per essere riscritto più e più volte. L'uso non necessario di typedef generalmente non è una buona pratica.

Sintassi:



rendere eseguibile uno script di shell
typedef>

Esempio:

typedef std::vector vInt;>

Di seguito è riportato il programma C++ per implementare typedef

C++








// C++ Program to implement typedef> #include> > using> namespace> std;> > int> main()> {> >// Now we can make more vectors by using vInt> >typedef> std::vector<>int>>vInt;> > >// vec1 is a vectorof type int> >vInt v;> > >v.push_back(190);> >v.push_back(180);> >v.push_back(10);> >v.push_back(10);> >v.push_back(27);> > >for> (>auto> X : v) {> >cout << X <<>' '>;> >}> > >return> 0;> }>

>

>

Produzione

190 180 10 10 27>

Applicazioni di typedef in C++

  • typedef in C++ può essere utilizzato per creare alias tipi di dati predefiniti con nomi lunghi.
  • Può essere utilizzato con strutture dati STL come Vettori, stringhe, mappe, ecc.
  • typedef può essere utilizzato anche con gli array.
  • Possiamo usare typedef con puntatori normali così come puntatori di funzioni .

Utilizzo di typedef con tipi di dati predefiniti

Typedef può essere utilizzato per creare alias tipi di dati predefiniti come int, carattere, float, e i loro derivati ​​simili lungo, corto, firmato, E non firmato. Il nuovo alias può quindi essere utilizzato per creare nuove variabili dei rispettivi tipi.

Sintassi:

typedef>

Esempio:

C++




// C++ for using typedef with predefined data types> #include> > using> namespace> std;> > int> main()> {> >// ulli can now be used for making more> >// unsigned long long int type variables> >typedef> unsigned>long> long> int> ulli;> >// ulli used to make variables> >ulli a{ 1232133 };> >cout << a;> >return> 0;> }>

>

>

Produzione

1232133>

Utilizzo di typedef con strutture dati STL

typedef può essere utilizzato anche con Strutture dati STL, Piace Vettori, stringhe, mappe, ecc. Se siamo uno di quelli che non vogliono importare l'intero spazio dei nomi standard nel nostro codice, dobbiamo scrivere std::vettore, std::string, ecc., ancora e ancora. Quindi usare typedef, in questo caso, può essere un modo rapido per prevenirlo e mantenere il nostro codice pulito e leggibile.

Sintassi:

typedef>

Esempio:

C++




// C++ Program to display usage for typedef with vectors> #include> #include> > int> main()> {> >// Now we can make more vectors by using vInt> >typedef> std::vector<>int>>vInt;> >// vec1 is a vectorof type int> >vInt vec1{ 1, 2, 3, 6, 2, 1 };> > >// Outputting the vector> >for> (>int> i = 0; i std::cout << vec1[i] <<' '; } return 0; }>

>

>

Produzione

1 2 3 6 2 1>

Utilizzo di typedef con gli array

typedef può essere utilizzato con gli array per creare array più nuovi (proprio come usarli con strutture dati STL). Possiamo facilmente creare nuovi array o creare array di array utilizzando typedef con array, mantenendo il nostro codice leggibile, senza interruzioni.

Sintassi:

typedef [ ]>

Dopo questo < nome_alias> ora può essere utilizzato per creare array di tipo < tipo_dati> e dimensione .

C++




// C++ program to show use of typedef with arrays> #include> using> namespace> std;> > int> main()> {> > >typedef> int> arr[3];> > >// Making new 1D array> > >arr array1{ 1 , 1, 1};> > > >cout <<>'Array output: '> ><<>' '>;> >for> (>int> i = 0; i <3; i++) {> >cout << array1[i] <<>' '>;> >}> >cout <<>' '>;> > >// Making new 2D array> >// Matrix is an array of arrays with size> >// ( 3 X 3 )> >arr matrix[3];> > >cout <<>'Matrix output: '> ><<>' '>;> > >for> (>int> i = 0; i <3; i++) {> >for> (>int> j = 0; j <3; j++) {> >// Initializing the matrix> >matrix[i][j] = i * j;> >}> >}> > >// Outputting the matrix> > >for> (>int> i = 0; i <3; i++) {> >for> (>int> j = 0; j <3; j++) {> >cout << matrix[i][j] <<>' '>;> >}> >cout <<>' '>;> >}> > >return> 0;> }>

>

>

Produzione

Array output: 1 1 1 Matrix output: 0 0 0 0 1 2 0 2 4>

Utilizzo di typedef con i puntatori

Typedef può essere utilizzato anche con i puntatori. Per una creazione più rapida di puntatori e anche per mantenere leggibile il codice. Possiamo usarli sia con puntatori di dati che con puntatori di funzione.

(i) Utilizzo con puntatori dati:

Di seguito sono riportati la sintassi, l'esempio e il codice sorgente per l'utilizzo di typedef con puntatori dati

Sintassi:

typedef *>

Esempio:

typedef int* iPtr; iPtr pointer1, pointer2;>

Di seguito è riportato il programma per utilizzare typedef con puntatori dati.

C++




// C++ Program to showcase the use of typedef> // with data pointer> > #include> using> namespace> std;> > int> main()> {> >int> a = 10;> >int> b = 20;> >// iPtr can now be used to create new pointers of type> >// int> >typedef> int>* iPtr;> > >iPtr pointer_to_a = &a;> >iPtr pointer_to_b = &b;> > >cout <<>'a is: '> << *pointer_to_a <<>' '>;> >cout <<>'b is: '> << *pointer_to_b <<>' '>;> > >return> 0;> }>

>

>

Produzione

a is: 10 b is: 20>

(ii) Utilizzo con puntatori a funzione:

Di seguito sono riportati la sintassi, l'esempio e il codice per visualizzare l'utilizzo di typedef con i puntatori a funzione.

Sintassi:

typedef < return_type>(*< alias_name>)(< parameter_type>,< parameter_type>, .... );>

Esempio:

typedef int (*fun_ptr)(int, int); fun_ptr new_ptr = &function;>

Qui, fun ptr può ora essere utilizzato per creare più puntatori a funzioni. Questo sarà più chiaro nel codice seguente.

C++




#include> > // Normal pointer to a function> int> (*func_ptr1)(>int>,>int>);> > // Using typedef with pointer to a function> typedef> int> (*func_ptr2)(>int>,>int>);> > // Function to multiply two numbers> int> product(>int> u,>int> v) {>return> u * v; }> > int> main(>void>)> {> >func_ptr1 = &product;> > >// Using typedefed function pointer for creating new> >// function pointer 'new_func'> >func_ptr2 new_func_ptr = &product;> > >// Using normal pointer to a function> >int> x2 = (*func_ptr1)(3, 2);> > >// Using the new function pointer> >int> x1 = (*new_func_ptr)(2, 4);> > >std::cout << x1 << std::endl;> >std::cout << x2 << std::endl;> }>

1nf 2nf 3nf

>

>

Produzione

8 6>

Qui, func_ptr1 è un normale puntatore a funzione, mentre func_ptr2 è un puntatore a funzione typedef e può essere utilizzato per creare più puntatori a funzione prendendo 2 numeri interi come argomenti e con tipo restituito int.

Nota: func_ptr2 non può più essere utilizzato come puntatore a funzione indipendente e può essere utilizzato solo per creare nuovi puntatori a funzione che possono puntare solo alla funzione che restituisce int e accetta due tipi int come parametri.