📜  C++中的泛型

📅  最后修改于: 2021-05-30 02:39:26             🧑  作者: Mango

泛型的想法是允许类型(整数,字符串等)和用户定义的类型成为方法,类和接口的参数。例如,可以很有效地使用泛型来使用诸如数组,映射等之类的类。我们可以将它们用于任何类型。

实现通用编程的方法可以提高代码的效率。通用编程使程序员能够编写适用于所有数据类型的通用算法。如果数据类型是整数,字符串或字符,则无需创建其他算法。

泛型编程的优点是

  1. 代码可重用性
  2. 避免函数重载
  3. 编写后,可以多次使用。

泛型可以使用模板在C++中实现。模板是C++中一个简单但功能非常强大的工具。简单的想法是将数据类型作为参数传递,这样我们就不必为不同的数据类型编写相同的代码。例如,一家软件公司可能需要对不同的数据类型使用sort()。无需编写和维护多个代码,我们可以编写一个sort()并将数据类型作为参数传递。

使用模板的通用函数:

我们编写了一个通用函数,可用于不同的数据类型。函数模板的示例为sort(),max(),min(),printArray()

#include 
using namespace std;
  
// One function works for all data types.
// This would work even for user defined types
// if operator '>' is overloaded
template 
  
T myMax(T x, T y)
{
    return (x > y) ? x : y;
}
  
int main()
{
  
    // Call myMax for int
    cout << myMax(3, 7) << endl;
  
    // call myMax for double
    cout << myMax(3.0, 7.0) << endl;
  
    // call myMax for char
    cout << myMax('g', 'e') << endl;
  
    return 0;
}
输出:
7
7
g

使用模板的通用类:

像函数模板一样,当类定义与数据类型无关的内容时,类模板很有用。对于诸如LinkedList,二叉树,Stack,Queue,Array等类很有用。

以下是模板Array类的简单示例。

#include 
using namespace std;
  
template 
class Array {
private:
    T* ptr;
    int size;
  
public:
    Array(T arr[], int s);
    void print();
};
  
template 
Array::Array(T arr[], int s)
{
    ptr = new T[s];
    size = s;
    for (int i = 0; i < size; i++)
        ptr[i] = arr[i];
}
  
template 
void Array::print()
{
    for (int i = 0; i < size; i++)
        cout << " " << *(ptr + i);
    cout << endl;
}
  
int main()
{
    int arr[5] = { 1, 2, 3, 4, 5 };
    Array a(arr, 5);
    a.print();
    return 0;
}
输出:
1 2 3 4 5

使用多类型泛型:

我们可以传递多种数据类型作为模板的参数。下面的示例演示了相同的内容。

#include 
using namespace std;
  
template 
class A {
    T x;
    U y;
  
public:
    A()
    {
        cout << "Constructor Called" << endl;
    }
};
  
int main()
{
    A a;
    A b;
    return 0;
}
输出:
Constructor Called
Constructor Called
想要从精选的最佳视频中学习和练习问题,请查看有关从基础到高级C++的C++基础课程以及有关语言和STL的C++ STL课程。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”