【小白学习C++ 教程】十五、C++ 中的template模板和泛型
@Author:Runsen
template模板在 C++ 中一个简单但非常强大的工具。简单的想法是将数据类型作为参数传递,这样我们就不需要为不同的数据类型编写相同的代码。
C++ 添加了两个新关键字来支持模板:template和typename。第二个关键字typename可以替换为关键字“class”。

模板可以以两种不同的方式使用。
- 函数模板
- 类模板
泛型
在学习template模板之前,了解一下泛型。在Java中学习过泛型,其实都是差不多的概念。泛型是允许类型(整数、字符串等)作为方法、类和接口的参数的想法。
例如,像数组等这样的对象可以非常有效地使用泛型。
实现了泛型编程的方法来提高代码的效率。通用编程使程序员能够编写适用于所有数据类型的通用算法。如果数据类型是整数、字符串或字符,则无需创建不同的算法。
泛型编程的优点是
- 代码可重用性
- 避免函数重载
- 一旦编写泛型,它可以用于多个cpp
泛型一般和模板结合使用。模板是一个简单但非常强大的 C++ 工具。简单的想法是将数据类型作为参数传递,这样我们就不需要为不同的数据类型编写相同的代码。
#include
using namespace std;// 函数模板
template T myMax(T x, T y)
{return (x > y) ? x : y;
}int main()
{// intcout << myMax(3, 7) << endl;// doublecout << myMax(3.0, 7.0) << endl;// charcout << myMax('g', 'e') << endl;return 0;
}
输出:
7
7
G
函数模板
函数模板用于创建一组将相同算法应用于不同数据类型的函数。
#include
using namespace std;
template A addition(A x, A y)
{return ( x + y );
}
int main()
{cout<<"Addition1 : "<
输出:
Addition1 : 8
Addition2 : 7.8
Addition3 : 8.7
如果执行cout<<"Addition3 : "<

值 4 & 4.7,它将是不同的整数和浮点数;而泛型函数声明两个参数的数据类型相同。
类模板
与函数模板一样,可以为通用类操作创建类模板。
有时,需要一个对都相同的类实现,只是使用的数据类型不同。
类模板可以轻松地为所有数据类型重用相同的代码。
以下是类模板的语法:
template
class className
{... .. ...
public:T var;T someOperation(T arg);... .. ...
};
在上面的声明中,T是模板参数,它是所用数据类型的占位符。
在类体内部,一个成员变量 var和成员函数someOperation()都是类型T。
创建类模板对象,需要在< >内部定义数据类型。
类名<数据类型> 类对象;
下面使用类模板对两个数字进行加减乘除的程序
#include
using namespace std;template
class Calculator
{
private:T num1, num2;public:Calculator(T n1, T n2){num1 = n1;num2 = n2;}void displayResult(){cout << "Numbers are: " << num1 << " and " << num2 << "." << endl;cout << "Addition is: " << add() << endl;cout << "Subtraction is: " << subtract() << endl;cout << "Product is: " << multiply() << endl;cout << "Division is: " << divide() << endl;}T add() { return num1 + num2; }T subtract() { return num1 - num2; }T multiply() { return num1 * num2; }T divide() { return num1 / num2; }
};int main()
{Calculator intCalc(2, 1);Calculator floatCalc(2.4, 1.2);cout << "Int results:" << endl;intCalc.displayResult();cout << endl << "Float results:" << endl;floatCalc.displayResult();return 0;
}
输出如下:
Int results:
Numbers are: 2 and 1.
Addition is: 3
Subtraction is: 1
Product is: 2
Division is: 2Float results:
Numbers are: 2.4 and 1.2.
Addition is: 3.6
Subtraction is: 1.2
Product is: 2.88
Division is: 2
Code:使用函数模板显示求数组中的最小数。
#include
using namespace std;template
int arrMin(T arr[], int n)
{int m = max;for (int i = 0; i < n; i++)if (arr[i] < m)m = arr[i];return m;
}int main()
{int arr1[] = {10, 20, 15, 12};int n1 = sizeof(arr1)/sizeof(arr1[0]);char arr2[] = {1, 2, 3};int n2 = sizeof(arr2)/sizeof(arr2[0]);cout << arrMin(arr1, n1) << endl;cout << arrMin(arr2, n2);return 0;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
