`

Item 45 成员函数模板

 
阅读更多

STL容器使用的iterator几乎都是智能指针,所以才能以++操作在节点之间移动。
但真正的指针,支持隐式类型转换:
1> 指向“派生类对象”的指针可以转成指向“基类对象”的指针;
2> 指向“non-const对象”的指针可以转成指向“const对象”的指针;

智能指针做不到这些。

上面的那三个类型转换是通过不了编译的。对于实例化的模板对象来说,它们之间的继承关系全部作废。
为了实现类型转换,要使用“成员函数模板”(member function template),丰富一下SmartPtr的实现才行:

该构造函数不声明为explicit是为了支持隐式类型转换。

分享到:
评论

相关推荐

    模板-函数模板与类模板.ppt

    模板分为两种主要类型:函数模板和类模板。 1. **函数模板**: - 函数模板是C++中提供的一种方式,通过它可以用一种通用的方式编写函数,以支持多种数据类型。例如,`abs` 函数用于计算数值的绝对值,通常需要为...

    C++中的函数模板和类模板

    C++中的模板是其强大的特性和核心部分,主要分为函数模板和类模板,它们都是实现参数化多态的重要手段。参数化多态允许程序员创建通用的代码,这些代码可以应用于多种数据类型,从而提高代码的复用性和灵活性。 **...

    模板类友元函数的一个例子

    ##### 三、成员函数 `getValue` 和 `setValue` 这两个成员函数分别用于获取和设置存储的值。 ```cpp template T store<T>::getValue() { return m_value; } template void store<T>::setValue(const T& item) { ...

    C++程序设计:第八讲 模板与数据结构-.pdf

    `Store`类模板包含一个类型为T的成员变量`item`,以及两个成员函数`GetElem`和`PutElem`,分别用于获取和存储数据。当需要使用类模板时,只需提供具体的数据类型,如`Store<int>`或`Store<Student>`。 需要注意的是...

    清华大学C++进阶讲义:第9章 模板与群体数据.pdf

    在C++编程语言中,函数模板和类模板是两种非常重要的概念,都是基于模板技术的实现。模板技术可以使得程序更加灵活和可重用。本章将详细介绍函数模板和类模板的定义、使用和应用场景。 函数模板 函数模板是一种...

    C++primer sales_item

    6. **same_isbn(const Sales_item &rhs) const**:这个成员函数检查当前`Sales_item`对象的ISBN是否与传入的`rhs`对象相同。如果相同,返回`true`,否则返回`false`。 7. **输入输出流操作符(Input/Output Stream ...

    c++运算符重载和模板

    1. **函数模板**:函数模板定义了一个通用的函数,编译器会根据传入的参数类型自动推断出模板的具体化版本。例如,我们可以定义一个通用的求最大值的模板函数: ```cpp template T max(T a, T b) { return a > b ...

    c++类模板学习指南

    3. 模板类的成员函数: - 构造函数:如 `LinkedList(void);` 创建空链表。 - 拷贝构造函数:如 `LinkedList(const LinkedList<T>& L);` 用于创建一个与现有链表相同的链表副本。 - 析构函数:如 `~LinkedList...

    C语言程序设计群体类和群体数据的组织PPT课件.pptx

    类模板是C++中的一种机制,它允许用户为类声明一种模式,使得类中的某些数据成员、某些成员函数的参数、某些成员函数的返回值,能取任意类型(包括基本类型和用户自定义类型)。类模板的声明格式为:template <模板...

    C++课件 ppt9

    在示例中,`Store`类模板被定义,它有一个类型参数`T`,并包含一个`item`成员变量和`GetElem`与`PutElem`两个成员函数,分别用于获取和设置`item`的值。通过类模板,我们可以创建存储不同类型数据的`Store`对象,如`...

    C++模板说明及使用详解

    这个特化版本只适用于 `std::string` 类型,并提供了专门的构造函数和成员函数。 #### 模板实参推演 当调用模板函数或创建模板类的对象时,通常不需要显式地指定模板参数。编译器会根据上下文自动推断出合适的类型...

    C++语言程序设计第九章PPT学习教案.pptx

    例如,一个名为`Store`的类模板可以用来存储任意类型`T`的元素,它包含一个`T item`的数据成员以及`PutElem`和`GetElem`两个成员函数,分别用于存储和获取数据。在类模板外定义成员函数时,需要指定模板参数表,如`...

    C语言程序设计群体类和群体数据的组织PPT学习教案.pptx

    在`Store`类中,`item`成员可以存储任何类型的数据,`PutElem`和`GetElem`成员函数则负责数据的存取。 3. **类模板的应用**:在示例代码中,`Store`类模板被实例化为`Store<int>`,`Store<Student>`和`Store...

    清华大学c++第9章PPT学习教案.pptx

    函数模板是C++中实现泛型编程的基础,它定义了一个通用的函数,可以处理不同的数据类型。例如,函数模板`abs`就是一个通用的求绝对值的函数,可以接受整型或浮点型等不同类型的参数。定义函数模板的关键字是`...

    Sales_item.h-gcc4.7.0.zip

    此外,类还提供了一系列的成员函数,如构造函数、拷贝构造函数、赋值运算符重载,以及计算销售额、比较两个`Sales_item`对象等方法,实现了对象的初始化、复制和比较功能。 在GCC 4.7.0版本中,`Sales_item.h`可能...

    C++模板专题

    首先,我们要理解模板的两种基本形式:函数模板和类模板。函数模板用于定义可以处理多种类型的函数,例如通用的`swap`函数。类模板则是创建泛型类的基础,如标准库中的`vector`和`list`。 1. **函数模板**: - ...

    【顶尖的C++模板】

    // 其他成员函数... }; ``` ### 预处理指令 #### 1. 文件包含指令 文件包含指令(`#include`)用于将其他文件的内容插入到当前源文件中。给定代码中包含了多个标准库头文件,例如: - `<stdio.h>`:用于基本的...

    C++课件第7章:模板与线性表(PPT文档).ppt

    \n // 其他成员函数...\nprivate:\n std::vector<T> elements;\n};\n```\n类模板实例化后,`LinearList<int>`和`LinearList<std::string>`将成为处理整数和字符串的独立类。\n\n**线性表**\n线性表是一种基本的数据...

    c++优秀教案入门级材料PART10

    本教程的第十部分主要介绍了两个关键概念:函数模板和类模板。 首先,我们来详细了解一下函数模板。函数模板是C++中用于创建泛型函数的方法,这样我们就可以编写一个函数,该函数不仅适用于一种特定类型,而且可以...

    C++语言程序设计(学习课件)09(精品).ppt

    模板分为两种主要类型:函数模板和类模板。 **函数模板** 是一种创建通用函数的方法,这些函数可以处理多种不同的数据类型。函数模板通过类型参数(type parameter)实现这一功能,这些参数在编译时被实际的数据...

Global site tag (gtag.js) - Google Analytics