函数模板与类模板的区别

西门子SCL出栈入栈算法(附带源码) 栈是一种数据结构,它的特点是数据后入先出(Last In First Out,LIFO)或者说是先入后出,意思是一样的。栈有三个基本动作:初始化、入栈和出栈。接下来给大家介绍下我使用SCL语言编写的栈函数,它以不定长数组作为存储区,以实数作为数据类型,实现了栈的初始化、入栈和出栈的操作。 阅读详情

函数模板与类模板有什么区别?答:函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化 
必 须由程序员在程序中显式地指定。

 

即函数模板允许隐式调用和显式调用而类模板只能显示调用

 

这期间有涉及到函数模板与模板函数,类模板与模板类的概念 (类似于类与类对象的区 别)

请看下面例子

 

注意:模板类的函数声明和实现必须都在头文件中完成,不能像普通类那样声明在.h文件中实现在.cpp文件中,原因可以看链接http://hi.baidu.com/cn_rigel/blog/item/6cf6fc083723e2286a60fb53.html

 

# include "stdafx.h" 
# include < iostream > 
using namespace std ; 

//使用模板创建一个返回最大值的函数
//这是一个函数模板
template < class Type> 
Type MaxValue( Type a, Type b) 
{ 
    if ( a > b) 
    { 
        return a; 
    } 
    else 
        return b; 
} 

//创建一个堆栈模板类
//这是一个类模板
template < class T> 
class Stack 
{ 
public : 
    Stack ( ) { m_nPos = 0; } 
    ~ Stack ( ) { } 

    void Push( T value) ; 
    T Pop( ) ; 

    bool IsEmpty( ) 
    { 
        return m_nPos = = 0; 
    } 
    bool HasElement( ) 
    { 
        return ! IsEmpty( ) ; 
    } 
    bool IsFull( ) 
    { 
        return m_nPos = = STATCK_SIZE; 
    } 

private : 
    int m_nPos; 
    //使用常量表示堆栈的大小

    const static int STATCK_SIZE = 100; 
    T m_Data[ STATCK_SIZE] ; 
} ; 
//模板类的成员函数实现

template < class T> 
void Stack < T> : : Push( T value) 
{ 
    //使用后置递增操作符

    m_Data[ m_nPos+ + ] = value; 
} 
template < class T> 
T Stack < T> : : Pop( ) 
{ 
    //使用前置递减操作符

    return m_Data[ - - m_nPos] ; 
} 

void TestMaxValue( ) 
{ 
    //隐式调用
  
// 函数模板的实例化在程序调用时自动完成
   cout < < MaxValue( 100 , 204) < < endl ; //MaxValue( 100 , 204) 这是一个模板函数 
    cout < < MaxValue( 2. 5002, 30. 003) < < endl ; //MaxValue( 2. 5002, 30. 003)这也是一个模板函数 
//当然由程序员自己指定也可以
    //显示调用

    cout < < MaxValue< int > ( 10, 20) < < endl ; 
    cout < < MaxValue< double > ( 2. 5002, 30. 003) < < endl ; 
} 

void TestStack( ) 
{ 
    //测试模板类(整数)

    Stack < int > intStack; //类模板的实例化由程序员显示的指定
    intStack. Push( 10) ; 
    intStack. Push( 20) ; 
    intStack. Push( 30) ; 

    while ( intStack. HasElement( ) ) 
    { 
        cout < < intStack. Pop( ) < < endl ; 
    } 

    //测试模板类(浮点)

    Stack < float > floatStack; //类模板的实例化由程序员显示的指定
    floatStack. Push( 1. 001) ; 
    floatStack. Push( 2. 002) ; 
    floatStack. Push( 3. 003) ; 

    while ( floatStack. HasElement( ) ) 
    { 
        cout < < floatStack. Pop( ) < < endl ; 
    } 

    //测试动态创建对象

    //Stack创建的指针必须指明类型

    Stack < int > * pInt = new Stack < int > ( ) ; 类模板的实例化由程序员显示的指定
    pInt- > Push( 10);


    pInt- > Push( 20) ; 
    pInt- > Push( 30) ; 

    while ( pInt- > HasElement( ) ) 
    { 
        cout < < pInt- > Pop( ) < < endl ; 
    } 
    if ( pInt ! = NULL ) 
    { 
        delete pInt; 
        pInt = NULL ; 
    } 
}



abaqus 根据坐标施加载荷- Analytical Field 载荷映射 在一些类型的分析中,需要将按位置分布的载荷施加到结构上,比如流体分析导出了结构的气动载荷、或者温度载荷,需要将压强分布、温度分布载荷施加到固体上。这种分析可以使用abaqus中的Analytical Field实现。 1 例子 1.1 结构 一个100*100mm的面,面的载荷分布函数为p=(x2+y2)0.5/((20.5)*100) MPa,即(0, 0)的压强为0,(100, 100)的压强为1。 1.2 载荷 载荷函数:p=(x^2+y^2)^0.5/((2^0.5)*100) in exce. 阅读详情

相关推荐

RouterOS v7.6实战:5分钟搞定IPv6双栈配置(含光猫桥接避坑指南)

本文详细解析了在RouterOS v7.6系统中配置IPv6双栈网络的实战步骤,特别针对家庭网络光猫桥接模式下的常见问题提供了避坑指南。文章涵盖了从基础配置到企业级部署的进阶内容,包括IPv6前缀获取、DHCPv6客户端设置、路由通告以及安全优化,帮助用户充分利用v7.6版本在IPv6支持上的改进与优势。

embedding5hiker的博客 1275

C++函数模板和模板函数的区别

函数模板:函数的重载能够实现一个函数名多用,将实现相同或者相似功能的函数用同一个函数名来定义,但是在程序中仍然要分别定义每一个函数。为进一步简化,C++提供了函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表,此通用函数即为函数模板。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现不同函数的功能。 模板函数:为函数模板传参,根据实际传入的参数类型生成的一个重载函数即为模板函数,它是函数模板的一次实例化。 ...

weixin_44596487的博客 5649

实战避坑:示波器测量非隔离开关电源的炸机风险与隔离方案

本文详细分析了使用示波器测量非隔离开关电源时的炸机风险,揭示了地线环路导致的短路问题,并对比了四种防炸机解决方案,包括示波器隔离供电、拔掉电源地线、使用差分探头和被测板隔离供电。重点推荐使用隔离变压器方案,确保测量安全与精度,同时提供了实操建议与经验分享,帮助工程师避免常见测量事故。

weixin_29224309的博客 555

实用经验 92 区分函数模版与模版函数,类模版和模板类

模板就是实现代码重用机制的一种工具,它可实现类型参数化,即把类型定义为参数, 从而实现了代码的可重用性。模版可以分为两类,一个是函数模版,另外一个是类模版。在使用模板概念时,经常会遇到这4个概念:函数模板,模板函数,类模板,模板类。这4个概念非常类似,也经常被我们所误用,本使用经验将主要讲述他们的差异。

一鸣惊人的博客 2025

锐捷交换机配置SSH

锐捷交换机配置ssh 一、组网需求 通过ssh功能可以远程登录管理设备 二、配置步骤 全局开启ssh服务,并且指定ssh版本 Ruijie>enable Ruijie#configure terminal Ruijie(config)#enable service ssh-server ------>开启SSH服务,默认关闭 Ruijie(config)#ip ssh version 2 ------>默认1.99版本,设置为版本2 添加登

Loners_fan的博客 1万+

Easymesh之拓扑模块(二)

介绍 easymesh 拓扑消息:Topo discovery、Topo notification、Topo query、Topo response

qq_53619687的博客 2152

函数模板和模板函数

函数模板(Function Template)和模板函数(Function Template)是C++中用于实现泛型编程的重要特性。函数模板(Function Template)是一种通用的函数描述,它可以用于生成多个具体的函数。函数模板定义了一个通用的函数结构,其中某些类型或值是未确定的,这些未确定的地方用模板参数(Template Parameters)表示。在使用函数模板时,编译器会根据具体的参数类型来实例化(Instantiate)出对应的具体函数。下面是一个函数模板的示例:``` template

L1413999的博客 663

手把手教你排查libstdc++.so.6版本问题:从GLIBCXX缺失到完美解决

本文深入解析Linux系统中常见的GLIBCXX版本缺失问题,以`ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6: version 'GLIBCXX_3.4.29' not found`为例,从动态链接原理入手,提供使用`strings`和`find`命令的诊断方法,并详细对比了四种解决方案的优缺点。文章重点推荐通过设置`LD_LIBRARY_PATH`或更新系统库的安全策略,并最终建议使用Docker容器化技术实现环境依赖的根治与统一管理。

j7k8l的博客 300

C++函数模板与类模板的区别

类模板: C++ 除了支持函数模板,还支持类模板(Class Template)。函数模板中定义的类型参数可以用在函数声明和函数定义中,类模板中定义的类型参数可以用在类声明和类实现中。类模板的目的同样是将数据的类型参数化。 声明类模板的语法为: template&lt;typename 类型参数1 , typename 类型参数2 , …&gt; class 类名{     //TODO: }...

ultimate1212的博客 2万+

六款经典限流保护电路设计:从原理到实战的完整指南

在电子系统设计中,过流保护是确保电路可靠运行的基础技术。其核心原理是通过电流采样、比较与执行三个环节构成闭环控制,将不可见的电流转化为可测量的电压信号进行处理。这项技术的核心价值在于防止因短路、堵转或异常负载导致的元器件损坏,从而提升整个系统的稳定性和安全性。在电源管理、电机驱动和精密仪器等应用场景中,限流保护电路都是不可或缺的安全屏障。本文深入解析了基于运放和晶体管搭建的经典方案,并重点探讨了采样电阻选型、参考电压生成以及PCB布局中的开尔文连接等工程实践要点,帮助读者从热门的DIY项目到工业控制都能实现

weixin_29166013的博客 351

免费教你快速学会分析运算放大器电路(保证学会)

本文旨在学习如何快速简单地对运算放大器进行分析

一名热爱技术的工程师的博客。分享技术干货,记录美好生活。永远相信美好的事情即将发生。 1万+

模板类与类模板、函数模板与模板函数等的区别

在C++中有好几个这样的术语,但是我们很多时候用的并不正确,几乎是互相替换混淆使用。下面我想彻底辨清几个术语,这样就可以避免很多概念上的混淆和使用上的错误。 这几个词是: 函数指针——指针函数 数组指针——指针数组 类模板——模板类 函数模板——模板函数 最终在使用中,我们就可以

sunxx1986的专栏 2万+

置顶必读(1) | 《YOLOv26实战:从入门到深度优化》专栏导读与完整目录导航(持续更新中)

🏆 本文收录于 《YOLOv26实战:从入门到深度优化》 专栏。 本专栏系统梳理并持续复现 YOLOv26 官方特性、核心改进、多任务支持、部署优化与行业落地,内容坚持 持续更新 + 深度拆解 + 工程落地导向,不仅讲“怎么用”,更讲“为什么这样设计、如何真正落地到项目中”。

**My Coding Family** 9万+

类模板与函数模板区别

类模板与函数模板区别主要有两点 类模板没有自动类型推导的使用方式 类模板在模板参数列表中可以有默认参数 测试代码 #include <iostream> #include <string> using namespace std; #include <string> //类模板 template<class NameType, class AgeTy...

嵌入式 1312

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C++类模板与函数模板区别 类模板与函数模板异同

C++类模板与函数模板区别 类模板与函数模板异同 类模板与函数模板区别主要有两点: 类模板没有自动类型推导的使用方式 类模板在模板参数列表中可以有默认参数 #include <iostream> #include <string> using namespace std; template<class NameType, class AgeType = int> class Person { public: Person(NameType name, AgeTy

qq_36711295的博客 449

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

这篇开始学习类模板相关知识,本篇主要学习什么是类模板,还有类模板和函数模板的区别 1.类模板语法 template <class T> 类 模板声明下面是函数就是函数模板,如果是类就叫类模板 2.一个类模板例子 下面写一个Person类 类模板,看看如何定义和如何使用类模板 #include <iostream> #include <string> using namespace std; //类模板 template <class T..

Anthony_tester的博客 5799

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

C++类模板与函数模板区别

即在有默认值的形参右边,不能出现无默认值的形参。实参与形参是按照从左向右的顺序建立对应关系的。C++11之前只有类模板支持默认模板参数,函数模板是不支持默认模板参数的,C++11后都支持。有默认值的形参必须在形参列表的最后。

myisaMengxin的博客 300

C++ 中函数模板和类模板有什么区别?

摘要: C++中的函数模板和类模板均支持参数化编程,但存在显著差异。函数模板通过隐式实例化(编译器自动推导类型)实现通用算法,适用于逻辑相同但数据类型不同的场景(如排序)。类模板需显式指定类型参数,用于构建通用数据结构(如栈、队列),其成员函数在实例化时全部生成。 特化方面,函数模板仅支持全特化(针对特定类型优化算法),而类模板支持全特化和部分特化(调整数据结构或行为)。函数模板特化语法简单,仅影响局部逻辑;类模板特化可能重构整体设计,复杂度更高。 影响: 函数模板:提升算法灵活性,维护简单,适合类型相关的

weixin_45422672的博客 1017

15.2.2 类模板与函数模板的区别

15.2.2 类模板与函数模板的区别 类模板没有自动类型推导 类模板在模板参数列表中可以有默认参数 下面来演示一下这两个区别: 首先还是上节的类模板: #include <iostream> #include <string> using namespace std; template<class NameType, class AgeType> class Person { public: Person(NameType name, AgeType age)

qq_32513033的博客 153

函数模板和类模板的区别

转自:函数模板与类模板有什么区别? 答:函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化必须由程序员在程序中显式地指定,即函数模板允许隐式调用和显式调用而类模板只能显示调用 。这期间有涉及到函数模板与模板函数,类模板与模板类的概念 (类似于类与类对象的区别)

部落阁 2619

函数模板与类模板的区别及STL中的迭代器

函数模板与类模板有什么区别?答:函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化必须由程序员在程序中显式地指定。 即函数模板允许隐式调用和显式调用而类模板只能显示调用 这期间有涉及到函数模板与模板函数,类模板与模板类的概念 (类似于类与类对象的区 别) 请看下面例子 注意:模板类的函数声明和实现必须都在头文件中完成,不能像普通类那样声明在.h文件中实

狒狒也是程序猿的专栏 2373

C++_template类模板与函数模板的区别

特性类模板函数模板实例化方式显式指定类型(C++17前)支持隐式类型推导默认模板参数支持C++11起支持特化支持全特化、偏特化仅支持全特化成员函数定义需模板前缀无需额外前缀静态成员每个实例化独立无静态成员(函数内static独立)典型应用数据结构(容器、智能指针)通用算法(比较、交换)通过理解这些区别,开发者能更高效地选择合适工具,构建灵活且类型安全的泛型代码。

leijinquan01的博客 834
上一篇: Effective C++ 读书笔记
下一篇: 为什么C++编译器不支持模板头文件和实现代码分离的编译
panfengsoftware
博客等级 码龄20年 38粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值