C++模板入门:函数与类模板详解及实例

5星 · 超过95%的资源 9 下载量 139 浏览量 更新于2024-08-31 1 收藏 92KB PDF 举报
C++模板编程是C++语言中的一个重要特性,它使得程序员能够编写通用的代码,适用于多种数据类型。本文将详细讲解C++中的两种主要模板类型——函数模板和类模板,并探讨它们的使用、声明和实例化过程。 **类型模板概述** 类型模板是C++模板的核心,它允许我们创建一个不特定于任何具体类型的函数或类。在C++中,`template`关键字用于声明模板,而`typename`(或`class`)用于指定模板参数代表类型。尽管`typename`和`class`在类型模板中具有相同的含义,但推荐使用`typename`,因为它更明确地表明参数T是类型,而不是其他值。 **函数模板示例** 函数模板如`add<T>`定义了一个接受两个同类型参数`a`和`b`,并返回它们相加结果的通用函数。例如: ```cpp template<typename T> T add(const T& a, const T& b) { return a + b; } // 实例化时,模板参数T被替换为具体的类型,如int或double int main() { int a = 1, b = 2; std::cout << "add result: " << add<int>(a, b) << std::endl; // 输出:add result: 3 } ``` **类模板示例** 类模板如`Point<T>`定义了一个可以存储三维坐标数据的通用点类,其中`x`数组的大小为3。同样,类模板的实例化会用具体类型替换模板参数: ```cpp template<typename T> class Point { private: T x[3]; // ... }; // 实例化为整型Point Point<int> point; ``` **C++14中的变量模板** C++14引入了变量模板,如`pi<T>`,它是一个常量模板,可以根据传入的模板参数提供不同精度的圆周率值。例如: ```cpp template<typename T> constexpr T pi = T(3.1415926535897932385L); // 使用double精度的pi auto area = pi<double> * radius * radius; ``` **模板实例化和默认参数** 函数模板和类模板的实例化需要明确指定模板参数,如`add<int>`或`Point<int>`。然而,当函数模板的参数类型可以从上下文中推断出来时,可以省略尖括号,如`add(a, b)`。对于函数模板,还可以设置默认参数,如`T=int`或`T=double`。 总结起来,C++模板编程是一种强大的工具,通过类型模板,我们可以编写出可重用且灵活的代码,适应多种数据类型。了解并熟练掌握模板的使用是提高C++程序设计效率的关键。