C++模板-33-类模板和函数模板的区别

本文详细讲解了类模板的概念,通过实例展示了如何定义和使用类模板,并对比了类模板与函数模板的区别,包括参数自动推导的支持情况及模板参数的默认值设定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇开始学习类模板相关知识,本篇主要学习什么是类模板,还有类模板和函数模板的区别

 

1.类模板语法

template <class T>
类

模板声明下面是函数就是函数模板,如果是类就叫类模板

 

2.一个类模板例子

下面写一个Person类 类模板,看看如何定义和如何使用类模板

#include <iostream>
#include <string>
using namespace std;

//类模板
template <class TypeName, class TypeAge>
class Person
{
public:
    Person(TypeName name, TypeAge age)
    {
        this->m_Name = name;
        this->m_Age = age;
    }

    TypeName m_Name;
    TypeAge m_Age;

    void showInfo()
    {
        cout<< "Name: " << m_Name << " Age: " << m_Age << endl;
    }
};



void test01()
{
    Person<string, int> p1("张三", 18);
    p1.showInfo();
}

int main()
{
    test01();
    system("pause");
    return 0;
}

 

3. 类模板和函数模板区别

现在我们学习了类模板和函数模板,语法格式都差不多,第一行是template开头,后面跟着如果是函数,就叫函数模板,如果跟着是类,就叫类模板。那么类模板和函数模板有什么区别呢?

3.1 类模板不支持参数自动推导

前面学习过函数模板中参数,支持参数类型自动推导,这个在类模板中就不行,必须要明确给出参数类型才可以,否则报错。

上面29行语法是正确,30行编译不过去,会提示模板参数缺失。

 

3.2 类模板在模板参数列表可以有默认参数

上面的类模板代码中,模板参数列表有两个<string, int>,下面代码修改一下,把int设置默认参数,调用类模板的使用可以不写int,代码如下

#include <iostream>
#include <string>
using namespace std;

//类模板
template <class TypeName, class TypeAge = int>
class Person
{
public:
    Person(TypeName name, TypeAge age)
    {
        this->m_Name = name;
        this->m_Age = age;
    }

    TypeName m_Name;
    TypeAge m_Age;

    void showInfo()
    {
        cout<< "Name: " << m_Name << " Age: " << m_Age << endl;
    }
};



void test01()
{
    Person<string> p1("张三", 18);
    p1.showInfo();
}

int main()
{
    test01();
    system("pause");
    return 0;
}

如果给定了第二个参数是int类型,所以第29行在模板参数列表中可以写成上面样子。这里设置了默认,如果模板参数不写,自然就是采用默认的int类型,如果模板参数传入了,就使用模板参数中传入的类型。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值