C++ Primer 第三版:深入探讨类模板

需积分: 46 34 下载量 118 浏览量 更新于2024-08-09 收藏 4.25MB PDF 举报
"深入理解C++,机器学习基础,类模板实例化规则" 在编程语言C++中,机器学习是其广泛应用的领域之一,而类模板是C++中的一个重要特性,允许程序员创建泛型类,以处理不同类型的数据。本文将详细探讨类模板的实例化规则及其在C++中的作用。 类模板的实例化并不在声明时发生,而是在编译器需要类模板的完整定义时进行。例如,在标题提及的“16.2节”中,可能会更深入地讨论这一过程。在以下示例中,`Queue<int>`被实例化,因为编译器需要知道这个具体类型的类的大小,以便为`new`表达式创建的对象分配正确的内存空间: ```cpp // 类模板的声明 template <class Type> class Queue; Queue<int>* global_pi = 0; // ok: 不需要类定义 int main() { // 错误: 需要实例 // 类模板定义必须可见 Queue<int> *p_qi = new Queue<int>; } ``` 在这个例子中,`Queue<int>`的实例化发生在`main`函数中,因为这里需要类模板的定义来创建对象。在全局变量`global_pi`的声明中,不需要类模板的定义,因为它只是一个指针,并不涉及对象的创建。 类模板的实例化可以发生在多个文件中,对于同一个类型。如同常规类一样,每个使用类模板成员的文件都需要该模板的定义。因此,通常将类模板的定义放在头文件(`.h`或`.hpp`)中,以确保在需要实例化的每个文件中都能访问到。例如,成员函数的定义,如: ```cpp template <class Type> void Queue<Type>::add( const Type &val ) { ... } ``` 这段代码定义了类模板`Queue`的成员函数`add`,它会为每种特定类型的`Queue`实例生成相应的成员函数实例。 C++是一种既古老又现代的语言。自1980年代末诞生以来,它不断发展,尤其是在1998年ISO标准化之后,C++有了一个统一的标准,这使得代码更易于移植,并且引入了C++标准库,为开发者提供了基础工具。C++不仅仅是C语言的超集,它包含了面向对象、泛型编程等多种编程范式,使其成为一个功能强大的编程语言。 本书《C++ Primer》第三版,由Stanley B. Lippman和Josée Lajoie合著,是中国电力出版社出版的中文版。两位作者在C++领域有着深厚的背景,其中Stanley Lippman自1984年起从事C++相关工作,而Josée Lajoie自1990年起担任C++标准委员会成员,确保了书中的内容与标准保持一致。这本书提供了一个重新审视C++语言的机会,帮助读者深入理解C++的各个方面,包括类模板的实例化规则和机器学习的基础知识。