by鬼神 发表于 2021-9-2 10:45:39

在 C++ 中使用模板

这是一个关于 C++ 模板的简短教程。

读者:对C++有一点了解的人

免责声明:尽管这是我写的一篇文章,但我已经使用了来自各个网站的信息作为参考。所以我不能声称它完全是我自己的文章。另外,请原谅我犯的任何错误。

那我们开始吧。

您对函数进行了多少次编码,并考虑过它是否适用于不同的数据类型。或者您编写一个类并希望为各种数据类型实现相同的类。

一个非常简单的例子是添加函数。

int add(int a,int b)
{
return(a+b);
}

如果我们可以使用相同的函数来添加整数、长整数和浮点值,那不是很好吗?这就是模板发挥作用的地方。

模板:
基本上,模板使您的函数或类更加抽象,以便您可以为不同的数据类型实现单个类//函数。

我们现在可以将我们的模板分类为函数模板和类模板。

我们将首先处理函数模板。

函数模板
函数模板允许函数处理不同的数据类型。这可以使用模板参数来实现。模板参数是一种特殊的参数,可用于将类型作为参数传递:就像常规函数参数可用于将值传递给函数一样,模板参数也允许将类型传递给函数。这些函数模板可以像使用任何其他常规类型一样使用这些参数。

其语法是:
template <class identifier> function_declaration;
template <typename identifier> function_declaration;

要使用特定数据类型调用函数,我们使用:
function_name <datatype> (arguments);

我们将看一个例子来了解更多。
template <class T>
T add (T a, T b) {
return (a+b);
}

上面,我们已经创建了一个带有模板参数 T 的模板函数。现在,这个参数 T 代表一个尚未定义的类型。我们稍后可以将此参数定义为我们喜欢的数据类型。

这是 main() 部分中的函数调用:
int x=2,y=3;
float a=10.3,b=6.2;

int integerSum = add <int> (x,y);
float realSum= add <float> (a,b);

cout<<"Integer Sum = "<<integerSum;
cout<<"nFloat Sum = "<<realSum;

输出将是

Integer Sum = 5

我们现在可以分析我们是如何做到的。在主体中,我们首先声明我们的变量,x 和 y 是整数,a,b 是浮点数。

接下来,有一个整数变量 integerSum,它接受 add() 函数的结果。看看我们如何告诉函数我们正在使用整数。我们将参数的数据类型作为 <data type> 放在函数名和参数之间。所以,现在编译器知道我们正在向函数发送整数值。所以它在将两个数字相加后返回一个整数。浮点值也是如此。

此外,没有必要定义元素的数据类型。编译器会自动检查类型。因此,您可以将函数调用减少为:

int a=2,b=3,sum=0;
sum=add(a,b);
cout&lt;&lt;sum;
Float Sum = 16.5

如果我们想发送两种不同的类型怎么办。然后,稍微更改声明以接受两种不同的类型。那是:

template &lt;class T,class U&gt;

和主体:

float a=2.35,result;
int b=5;
result=add(a,b); ////If you want, you can use result=add &lt;float,int&gt;(a,b);
T add (T a, U b) {
return (a+b);
}

所以,现在这将是关于函数模板的。我们现在可以转到类模板。

类模板:
类模板与函数模板相同,只是它们用于处理类。类模板在处理堆栈、树、图形等数据结构时非常有用。这里的成员可以使用模板参数作为类型。

在下面的语法中, identifier 是指您为类型指定的名称类声明的语法是:
template &lt;class identifier&gt; class classname {....};
Eg:
template &lt;class T&gt; class add_class {.....};

定义类的成员函数:
template &lt;class identifier&gt; identifier classname &lt;identifier&gt; :: function_name() {.....}
Eg:
template &lt;class T&gt; T add_class &lt;T&gt; :: sum() {....}

要创建具有特定数据类型的类对象:
classname &lt;datatype&gt; object;
Eg:
add_class &lt;int&gt; obj1;

我们可以使用与函数模板中使用的相同的加法示例。在这里,我们创建一个类添加:
template &lt;class T&gt;
class add {
T a,b;
public:
    T add(T first,T second)
    { a=first; b=second; }
    T sum()
    { return(a+b); }
};
上面,我们使用类添加。它有两个元素 a 和 b,它们是模板参数类型。我们必须稍后定义它。有一个构造函数为 a 和 b 赋值(因为 a 和 b 是私有的,我们必须使用这个构造函数)。还有一个成员函数 sum() 返回 a 和 b 的总和。

现在让我们看看 main 函数中实际添加两个整数和两个浮点数的代码。
add &lt;int&gt; obj1(2,3);
add &lt;float&gt; obj2(10.3,6.2);

int res1 = obj1.sum();
float res2 = obj2.sum();

cout&lt;&lt;&quot;Integer sum = &quot;&lt;&lt;res1;
cout&lt;&lt;&quot;nFloat sum = &quot;&lt;&lt;res2;

在上面的代码中,我们创建了两个对象,obj1 和 obj2。obj1 是整数类型,obj2 是浮点数。也就是说,obj1 的元素 a 和 b 是整数,而 obj2 的元素是浮点数。我们使用构造函数在对象创建期间用值初始化 a 和 b。其余的代码很简单,如果您一直阅读本文,您就会理解它。

关于模板还有更多要谈的,但现在,我有点累了。所以,我们将在这里结束我们的文章。关于模板还有更多要讨论的内容,但我们稍后会研究。模板使编程变得通用,从而使生活更轻松。C++ 中有标准模板库,它提供了许多预定义的类型,如堆栈、队列等

[这是 cprogramming.com 关于 STL 的一小段]

C++ 标准的最新版本之一是标准模板库 (STL)。STL 是一组抽象数据类型、函数和算法,旨在处理用户指定的数据类型。每个抽象数据类型还包含有用的函数,包括重载运算符,以访问它们。标准模板库的精神是泛型编程的思想——算法或数据结构的实现,而不依赖于所处理的数据类型。例如,您可以使用 STL 向量容器来存储您想要的任何对象的向量(将其视为可调整大小的数组)。在 C 和非 STL C++ 中,您可以使用数组来获得类似的功能,但数组仅限于单一类型的数据结构。此外,STL 提供了一些不错的功能,例如为您处理内存(无内存泄漏),

希望你们喜欢这个教程,就给我回复一下你的意见,我们一起交流,我是by鬼神,中国红客联盟
页: [1]
查看完整版本: 在 C++ 中使用模板