函数模板和类模板知识点小结

    科技2025-06-21  14

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

    文章目录

    前言一、函数模板二、类模板1.定义2.实例化3.非类型参数和参数的默认值 总结


    前言

    当一组代码(函数、类)只是参数类型改变,逻辑不变时,就可以考虑使用模板,将一组代码整合成一个代码。

    一、函数模板

    template <class T>//关键字class可以用typename替代 T max(T a,T b){ return a>b ? a: b; } int main(){ int a, b; cin >> a >> b; cout << "a和b中更大的是" << max(a,b); double c, d; cin >> c >> d; cout << "c和d中更大的是" << max(c,d); rerturn 0; }

    函数模板:实现数据类型的参数化,将函数的形式参数的类型设计成可以变化的参数 模板实例化:编译器根据实际参数类型确定模板参数的类型,形成一个可以执行的函数。实例化的函数称为模板函数。

    template <class T1, class T2, class T3> T3 calc(T1 a, T2 b){ return a+b; } int main(){ int a; char b; cin >> a >> b; cout << "a+b=" << calc<int, char, char>(a,b) << endl; return 0; }

    通常每个模板的形式参数都要在函数的形式参数表中至少出现一次,这样才能确定模板实际参数类型。如果没有出现,可以通过显示指定模板实参来解决

    calc<int, char, char>(5,'a');

    输出’f’

    calc<int, char, int>(5,'a');

    输出102

    二、类模板

    1.定义

    类模板定义

    template <class T(模板的形式参数表)> calss 类名{……}

    类模板的成员函数定义

    template <class T(模板的形式参数表)> 返回类型 类名<T>::函数名(形式参数表){ 函数体 }

    必须将成员函数定义为函数模板,即使成员函数没有必要定义为函数模板 类名必须包含其模板形式参数:类名< T >

    2.实例化

    不像函数模板,使用类模板使时,编译器无法更具对象定义的过程确定模板参数的类型,需要用户明确指出模板形式参数的类型。

    类模板的对象的定义

    类模板名<模板的实际参数表> 对象表; Array<int> array1;

    3.非类型参数和参数的默认值

    模板参数大多是用来代表还没有确定的对象类型,这种参数又称为类型参数。 但是模板参数还可以是非类型参数,例如整型数或实型数。非类型参量用常量表达式作为实参,必须是编译时的常量。

    template <class T, int low, int high> class Array{……} Array<int, 3, 10> array1;

    模板参数也可以指定默认值。在定义对象时,可以指定模板实参,使用默认值。

    template <class T = int> class Array{……} Array<> array1;

    总结

    提示:这里对文章进行总结: 例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

    Processed: 0.014, SQL: 8