泛型的想法是允许类型(整数,字符串等)和用户定义的类型成为方法,类和接口的参数。例如,可以很有效地使用泛型来使用诸如数组,映射等之类的类。我们可以将它们用于任何类型。
实现通用编程的方法可以提高代码的效率。通用编程使程序员能够编写适用于所有数据类型的通用算法。如果数据类型是整数,字符串或字符,则无需创建其他算法。
泛型编程的优点是
- 代码可重用性
- 避免函数重载
- 编写后,可以多次使用。
泛型可以使用模板在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等的更多准备工作,请参阅“完整面试准备课程” 。