Ключевое слово typedef в C++ используется для псевдонимов существующих типов данных, пользовательских типов данных и указателей на более осмысленное имя. Typedefs позволяют вам давать описательные имена стандартным типам данных, что также может помочь вам самостоятельно документировать свой код. В основном определения типов используются для псевдонимов, только если предопределенное имя слишком длинное или сложное, чтобы писать его снова и снова. Ненужное использование typedef обычно не является хорошей практикой.
Синтаксис:
typedef <current_name> <new_name>
Пример:
typedef std::vector<int> vInt;
Ниже приведена программа C++ для реализации typedef.
С++
// C++ Program to implement typedef
#include <bits/stdc++.h>
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;
}
Выход
190 180 10 10 27
Приложения typedef в C++
- typedef в C++ можно использовать для псевдонимов предопределенных типов данных с длинными именами.
- Его можно использовать со структурами данных STL, такими как векторы, строки, карты и т. д.
- typedef также может использоваться с массивами.
- Мы можем использовать typedef как с обычными указателями, так и с указателями на функции.
Использование typedef с предопределенными типами данных
Typedef можно использовать для псевдонимов предопределенных типов данных, таких как int, char, float, и их производных, таких как long, short, signed и unsigned. Затем новый псевдоним можно использовать для создания новых переменных соответствующих типов.
Синтаксис:
typedef <data_type_name> <new_name>
Пример:
С++
// C++ for using typedef with predefined data types
#include <iostream>
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;
}
Выход
1232133
Использование typedef со структурами данных STL
typedef также может использоваться со структурами данных STL, такими как векторы, строки, карты и т. д. Если мы из тех, кто не хочет импортировать в наш код все пространство имен std, нам нужно написать std::vector, std::string и т. д. снова и снова. Таким образом, использование typedef в этом случае может быть быстрым способом предотвратить это и сохранить наш код чистым и читабельным.
Синтаксис:
typedef <data_structure_name> <new_name>
Пример:
С++
// C++ Program to display usage for typedef with vectors
#include <iostream>
#include <vector>
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 < vec1.size(); i++) {
std::cout << vec1[i] <<
" "
;
}
return
0;
}
Выход
1 2 3 6 2 1
Использование typedef с массивами
typedef можно использовать с массивами для создания новых массивов (так же, как их использование со структурами данных STL). Мы можем легко создавать новые массивы или создавать массивы массивов, используя typedef с массивами, сохраняя при этом наш код читабельным и плавным.
Синтаксис:
typedef <data_type> <alias_name> [<size>]
После этого < alias_name> теперь можно использовать для создания массивов типа-< data_type> и размера .
С++
// C++ program to show use of typedef with arrays
#include <iostream>
using
namespace
std;
int
main()
{
typedef
int
arr[3];
// Making new 1D array
arr array1{ 1 , 1, 1};
cout <<
"Array output: "
<<
"\n"
;
for
(
int
i = 0; i < 3; i++) {
cout << array1[i] <<
" "
;
}
cout <<
"\n"
;
// Making new 2D array
// Matrix is an array of arrays with size
// ( 3 X 3 )
arr matrix[3];
cout <<
"Matrix output: "
<<
"\n"
;
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 <<
"\n"
;
}
return
0;
}
Выход
Array output: 1 1 1 Matrix output: 0 0 0 0 1 2 0 2 4
Использование typedef с указателями
Typedef также может использоваться с указателями. Для более быстрого создания указателей и обеспечения удобочитаемости кода. Мы можем использовать их как с указателями данных, так и с указателями функций.
(i) Использование с указателями данных:
Ниже приведен синтаксис, пример и исходный код для использования typedef с указателями данных.
Синтаксис:
typedef <data_type>* <alias_name>
Пример:
typedef int* iPtr; iPtr pointer1, pointer2;
Ниже приведена программа для использования typedef с указателями данных.
С++
// C++ Program to showcase the use of typedef
// with data pointer
#include <iostream>
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 <<
"\n"
;
cout <<
"b is: "
<< *pointer_to_b <<
"\n"
;
return
0;
}
Выход
a is: 10 b is: 20
(ii) Использование с указателями функций:
Ниже приведен синтаксис, пример и код для отображения использования typedef с указателями на функции.
Синтаксис:
typedef <return_type> (*<alias_name>)(<parameter_type>,<parameter_type>,....);
Пример:
typedef int (*fun_ptr)(int, int); fun_ptr new_ptr = &function;
Здесь fun ptr теперь можно использовать для создания дополнительных указателей на функции. Это будет более понятно в приведенном ниже коде.
С++
#include <iostream>
// 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;
}
Выход
8 6
Здесь «func_ptr1» — это обычный указатель функции, а «func_ptr2» — указатель функции typedef, и его можно использовать для создания дополнительных указателей функций, принимающих 2 целых числа в качестве аргументов и возвращаемых типом «int».
Примечание. «func_ptr2» больше нельзя использовать как независимый указатель на функцию, и его можно использовать только для создания новых указателей на функции, которые могут указывать только на функцию, возвращающую int и принимающую два типа int в качестве своих параметров.