C++ 类模板与成员函数模板示例解析

 更新时间:2023年01月03日 15:57:20   作者:码小方  
这篇文章主要为大家介绍了C++ 类模板与成员函数模板示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

类模板

前面以函数模板为例,介绍了具体化与实例化。那么对于类模板,有什么不同呢?

类包括成员变量和成员函数,他们都可以包含类模板的模板参数。而成员函数本身也可以是函数模板。看下面的两个类:

// 类模板
template <typename T>
class A {
private:
    T t;
public:
    void funcA(T t);
};
template <typename T>
void A<T>::funcA(T t) {
    cout << t;
}
// 成员函数模板
class B {
private:
    int t;
public:
    template <typename T>
    void funcB(T t);
};
template <typename T>
void B::funcB(T t) {
    cout << t;
}
int main()
{
    A<int> a1;
    a1.funcA(1);
    A<char*> a2;
    a2.funcA("2");
    B b;
    b.funcB(1);
    b.funcB("2");
}

类模板A中包含成员函数funcA;类B包含一个成员函数模板funcB。我们仔细看下二者的区别。

类模板与成员函数模板的区别

首先,类模版A中的成员函数的类型可以用类模板参数T,而成员函数模板做不到。

其次,在调用成员函数时,类模板A需要先指定一种类型创建一个实例对象(如代码中的a1),然后才能调用成员函数,a1.funcA只能传入int类型参数。如果想传char*类型参数,必须用char*创建一个实例(代码中的a2)。

而对于类B,则创建一个实例对象(b)之后,可以任何类型作为参数来调用funcB。

只要明白了前面讲的模板实例化,这里面的原因也很好理解。对于A来说,整个类是一个模版,当使用int类型生成对象a1时,也会对类模板A进行实例化,生成A类,其中所有的T都会替换为int,因此生成的类只有一个成员函数 void funcA(int)。如果想传入char*,则必须实例化A<char*>这个类。

而对于类B,它本身只是一个普通类,只不过它包含一个成员函数模板。当编译器发现代码中有调用这个成员函数funcB(int),编译时会为funcB实例化;如果也有调用funcB(char*),则会为B生成funcB<char*>成员函数。也就是说,类B的成员函数的数量不是确定的,是根据funcB被调用的情况来决定到底实例化出多少个成员函数。

以上就是C++ 类模板与成员函数模板示例解析的详细内容,更多关于C++ 类模板成员函数模板的资料请关注脚本之家其它相关文章!

相关文章

  • 基于Matlab制作一个不良图片检测系统

    基于Matlab制作一个不良图片检测系统

    这篇文章主要为大家详细介绍了如何基于Matlab制作一个不良图片检测系统,文中的示例代码讲解详细,感兴趣的可以跟随小编一起了解一下
    2022-07-07
  • C++ 实现双向链表的实例

    C++ 实现双向链表的实例

    这篇文章主要介绍了C++ 实现双向链表的实例的相关资料,需要的朋友可以参考下
    2017-07-07
  • VS报错C1189及MSB3721解决方法

    VS报错C1189及MSB3721解决方法

    在使用VS进行CUDA编译时出现错误,本文主要介绍了VS报错C1189及MSB3721解决方法,具有一定的参考价值,感兴趣的可以了解一下
    2024-06-06
  • Opencv图像处理之轮廓外背景颜色改变

    Opencv图像处理之轮廓外背景颜色改变

    这篇文章主要为大家详细介绍了Opencv图像处理之轮廓外背景颜色改变,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • 一起聊聊C++中的特殊成员函数

    一起聊聊C++中的特殊成员函数

    在C#中要说类默认给我们定义的特殊成员函数,莫过于构造函数,但在 C++ 中这样的特殊函数高达6种,本文就整合一下和大家一起聊一聊
    2022-07-07
  • 数据结构 C语言实现循环单链表的实例

    数据结构 C语言实现循环单链表的实例

    这篇文章主要介绍了数据结构 C语言实现循环单链表的实例的相关资料,需要的朋友可以参考下
    2017-05-05
  • 为什么要学习C语言 C语言优势分析

    为什么要学习C语言 C语言优势分析

    不止一个学生问到我:“老师,为什么我们的应用程序设计要学C语言而不是别的?C语言不是已经过时了吗?如果现在要写一个Windows程序,用VB或Dephi开发多快呀,用C行吗?退一万步,为什么选择C而不是C++呢?”
    2013-07-07
  • Qt creator中项目的构建配置和运行设置的步骤

    Qt creator中项目的构建配置和运行设置的步骤

    使用 Qt Creator 集成开发环境构建和运行程序是一件非常简单的事情,一个按钮或者一个快捷键搞定全部,本文主要介绍了Qt creator中项目的构建配置和运行设置的步骤,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • C语言扑克牌游戏示例

    C语言扑克牌游戏示例

    大家好,本篇文章主要讲的是C语言扑克牌游戏示例,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • C语言函数栈帧的创建和销毁详解

    C语言函数栈帧的创建和销毁详解

    这篇文章主要为大家详细介绍了C语言函数栈帧的创建和销毁,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02

最新评论