【小白学习C++ 教程】十五、C++ 中的template模板和泛型

@Author:Runsen

template模板在 C++ 中一个简单但非常强大的工具。简单的想法是将数据类型作为参数传递,这样我们就不需要为不同的数据类型编写相同的代码。

C++ 添加了两个新关键字来支持模板:templatetypename。第二个关键字typename可以替换为关键字“class”。

模板可以以两种不同的方式使用。

  1. 函数模板
  2. 类模板

泛型

在学习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;
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章