Typedef в C++

11 лучших IDE для C++ (и редакторов кода) на 2022 год Программирование и разработка

Ключевое слово 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. Затем новый псевдоним можно использовать для создания новых переменных соответствующих типов.

Читайте также:  Java или C++ - что выбрать

Синтаксис:

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 в качестве своих параметров.

Оцените статью
bestprogrammer.ru
Добавить комментарий