La palabra clave typedef en C++ se utiliza para crear alias sobre tipos de datos existentes, tipos de datos definidos por el usuario y punteros a un nombre más significativo. Typedefs le permite dar nombres descriptivos a tipos de datos estándar, lo que también puede ayudarle a autodocumentar su código. La mayoría de los typedefs se utilizan para crear alias, solo si el nombre predefinido es demasiado largo o complejo para escribirlo una y otra vez. El uso innecesario de typedef generalmente no es una buena práctica.
Sintaxis:
administrador de tareas para linux
typedef>
Ejemplo:
typedef std::vector vInt;>
A continuación se muestra el programa C++ para implementar 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;> }> |
>
>Producción
190 180 10 10 27>
Aplicaciones de typedef en C++
- typedef en C++ se puede utilizar para crear alias de tipos de datos predefinidos con nombres largos.
- Se puede utilizar con estructuras de datos STL como Vectores, cadenas, mapas, etc.
- typedef también se puede utilizar con matrices.
- Podemos usar typedef con punteros normales así como punteros de función .
Usando typedef con tipos de datos predefinidos
Typedef se puede utilizar para crear alias de tipos de datos predefinidos como int, carbón, flotador, y sus derivados como largo, corto, firmado, y no firmado. El nuevo alias se puede utilizar para crear nuevas variables de los tipos respectivos.
Sintaxis:
typedef>
Ejemplo:
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;> }> |
>
>Producción
1232133>
Usando typedef con estructuras de datos STL
typedef también se puede utilizar con estructuras de datos STL, como Vectores, cadenas, mapas, etc. Si somos de los que no queremos importar todo el espacio de nombres estándar en nuestro código, entonces necesitamos escribir std::vector, std::string, etc, una y otra vez. Por lo tanto, usar typedef, en este caso, puede ser una forma rápida de evitar esto y mantener nuestro código limpio y legible.
Sintaxis:
typedef>
Ejemplo:
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; }> |
>
>Producción
1 2 3 6 2 1>
Usando typedef con matrices
typedef se puede usar con matrices para crear matrices más nuevas (al igual que usarlas con estructuras de datos STL). Podemos crear fácilmente nuevas matrices o crear matrices de matrices usando typedef con matrices, mientras mantenemos nuestro código legible sin problemas.
Sintaxis:
typedef [ ]>
Después de esto < alias_nombre> ahora se puede utilizar para crear matrices de tipo- < tipo_datos> y tamaño .
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;> }> |
>
>
escribe json en el archivo pythonProducción
Array output: 1 1 1 Matrix output: 0 0 0 0 1 2 0 2 4>
Usando typedef con punteros
Typedef también se puede utilizar con punteros. Para una creación más rápida de punteros y también para mantener el código legible. Podemos usarlos tanto con punteros de datos como con punteros de función.
(i) Uso con punteros de datos:
A continuación se muestra la sintaxis, el ejemplo y el código fuente para usar typedef con punteros de datos.
Sintaxis:
typedef *>
Ejemplo:
typedef int* iPtr; iPtr pointer1, pointer2;>
A continuación se muestra el programa para usar typedef con punteros de datos.
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;> }> |
>
>Producción
a is: 10 b is: 20>
(ii) Uso con punteros de función:
A continuación se muestra la sintaxis, el ejemplo y el código para mostrar el uso de typedef con punteros de función.
Sintaxis:
typedef < return_type>( *< alias_name>)(< parameter_type>,< parameter_type>, .... );>
Ejemplo:
typedef int (*fun_ptr)(int, int); fun_ptr new_ptr = &function;>
Aquí, ahora se puede utilizar fun ptr para crear más punteros de función. Esto quedará más claro en el código siguiente.
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;> }> |
>
>Producción
8 6>
Aquí, func_ptr1 es un puntero de función normal, mientras que func_ptr2 es un puntero de función typedef y se puede usar para crear más punteros de función tomando 2 enteros como argumentos y con tipo de retorno int.
Nota: func_ptr2 ya no se puede usar como un puntero de función independiente y solo se puede usar para crear nuevos punteros de función que solo pueden apuntar a la función que devuelve int y toma dos tipos int como parámetros.