函数模板 与 类模板 详解 (超详细) 文章附代码(2)

        上一篇文章中详细介绍了函数模板的内容,今天继续来给大家详细描述如何来使用类模板。以下内容大多为学习过程中的心得体会与总结分享给大家,如有错误欢迎大家批评指正!感谢!

目录

二. 类模板

2.1 定义一个类模板

2.2 类模板继承

2.3 类模板成员函数在类内声明类外定义

2.4 类模板的友元函数


二. 类模板

        当我们想建立一个类,并且希望这个类中的成员变量可以是任意类型的数据,这种情况下,我们就可以通过类模板的方式来实现这种功能。与函数模板相类似,通过类模板来建立一个通用的类,这个类中的成员变量的类型可以是任意的。
        类模板不是一个实际的类型,是虚拟的,就像一个ppt的模板。类模板只有在实例化的时候才会构建类,而不是在编译的时候构建类,和函数模板一样。

2.1 定义一个类模板

定义格式:   template<typename T>
                     class person { T age; };
实例化格式:类名 <类型>  对象名(参数);

#include <iostream>
using namespace std;

template <typename T>
class person
{
public:
    T age;
};

int main(int argc, char const *argv[])
{
    person<int> people; //通过无参构造的方式构建一个名叫people的对象
    return 0;           //即使没有传入参数,也必须指定模板中T的具体类型
}

注意:
        1. 函数模板可以使用隐式类型推导,但类模板不可以,必须是显示推导,所以上段代码中即使是无参构造,也必须给模板中的T指定一个类型。
        2. 类模板在定义template时候,可以加上默认类型参数。template<class T1,class T2=string>在模板中的默认参数类型中,如果所有模板参数都是缺省,但在类进行实例化的时候,尖括号不可以省略

2.2 类模板继承

1. 普通类之间的继承:class son : public father{}
2. 模板类继承:

        普通子类继承模板类:格式:class 子类:public 父类 <指定类型>
        构建对象:和普通对象的构建一样:类名 对象名(参数列表);


        类模板继承类模板
        格式: template<class T1,class T2>
                    class son : public person <T1,T2>  { }

#include <iostream>
using namespace std;

template <typename T>
class father
{
public:
    T age;
};

class son : public father<int> //普通子类继承父类,必须指定一个类型
{
public:
    int num;
};

template <typename T1, typename T2>
class child : public father<T1> //类模板继承类模板,可以用子类中类型指定父类T类型
{
public:
    int num;
};

int main(int argc, char const *argv[])
{
    son son1;                //定义一个普通类继承模板类对象
    child<int, char> child1; //定义一个模板类继承模板类对象
    return 0;
}

  

2.3 类模板成员函数在类内声明类外定义


        与普通类的成员函数不同,类模板中的成员函数,如果想要在在类内声明,在类外定义的话需要加上模板的类限定符。

#include <iostream>
using namespace std;

template <typename T>
class person
{
public:
    T age;
    void fun(T value);
};

template <typename T>
void person<T>::fun(T value)
{
    cout << "我是模板类的类外函数" << endl;
}

int main(int argc, char const *argv[])
{
    person <int> p;
    p.fun(1);
    return 0;
}

2.4 类模板的友元函数


1. 类外实现友元函数:
           先需要在类内声明函数,声明的时候需要加空模板列表,也就是函数名后加<>
           其次需要在类外实现,但一定是类的定义前实现,在friend函数声明前需要有函数体。
           最后在定义完友元函数后,需要先声明模板类。
2. 类内实现模板类的友元函数,和普通友元函数实现一样。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值