C++函数重载与模板要点

C++函数重载决议:普通函数与模板函数的优先级规则详解 函数重载是C++多态性的基础机制,它允许在同一作用域内定义多个同名函数。其核心原理是编译器根据调用时实参的类型、数量和顺序,从候选函数集中选择最匹配的版本。这一机制的技术价值在于提升代码的表达力和类型安全性,同时支持泛型编程范式。在工程实践中,重载决议广泛应用于标准库设计、数学运算库和序列化框架等场景。当普通函数与函数模板同时参与竞争时,编译器会依据一套精细的匹配规则进行抉择:若模板能推导出完全匹配的实例,则优先于需要类型转换的普通函数;若两者匹配等级相同,则非模板函数胜出。理解这些规则有助于避免常见的编译 阅读详情

基础知识不谈了,主要写些重点。
重载函数的参数个数,参数类型,参数顺序三者中必须至少有一种不同。

class不可省略

template<class T1,T2>是错误的,T2前也需要加class

继承的类前也需要写template

其实是可以不用template的,但是不用的话就需要在继承的基类的尖括号里注明类型,总之无论是具体类型还是模板,都是需要注明类型的。

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;

template<class T>  //类外定义模板
class Animal{
public:
    void Jiao(){
        cout << mAge << "岁动物在叫!" << endl;
    }
public:
    T mAge;
};

template<class T>
class Cat : public Animal<T>{};//继承

int main(void)
{   
    Cat<int> cat;
    return 0;
}

模板类的外部实现

模板类的内部定义没什么好说的,在类前价格template就行。而在类模板外部实现的时候,如下


template<class T>   //外部实现,构造函数没有返回类型
Person<T>::Person(T age, T id){
    this->mID = id;
    this->mAge = age;
}

不要滥用友元+模板的组合

因为有些复杂,不符合普通规则

重载与const

顶层const区别不了形参。如

int func(int);
int func(const int );//错误,重复声明

int func(int*);
inr func(int* const);//错误,重复声明。

如果形参是某种类型的指针或引用,可以通过区分指向的是常量对象还是非常量对象实现函数重载,此时的const是底层的

int func(int&);
int func(const int &);//新函数,作用于常量引用,const是底层的

int func(int *);
int func(const int* );//新函数,作用于指向常量的指针,const是底层的

即编译器可以通过实参是否是常量来推断应该调用哪个函数。

重载的作用域

茅厕每行的同名函数会把外层的同名函数隐藏,哪怕形参类型不一样。而且变量也会把外层函数隐藏掉。

C++函数重载与模板 我们可以看到,通过函数重载和模板,我们只需要编写一份通用的代码,就能够处理各种类型的数据,而不需要为每种类型编写专门的函数。在C++中,一个函数名可以对应多个不同参数类型的函数,这被称为函数重载。另外,C++还提供了模板这一机制,让我们能够编写通用的代码。但是如果我们需要计算两个浮点型数的和或积,难道还要定义新的函数吗?接下来让我们来看一个更加复杂的情况,假设我们有一个数组,需要对其中的每个元素求和或积。上面两个声明并没有实现函数体,而是告诉编译器有两个新的函数,分别用于计算两个浮点数的和和积。 阅读详情

相关推荐

3、C++ 模板编程:函数模板与类模板详解

本文详细介绍了C++中的模板编程,涵盖函数模板和类模板的使用与实现。内容包括函数模板的参数推导规则、模板重载机制,以及类模板的定义与成员函数实现。通过示例代码分析了模板参数匹配的注意事项以及如何处理类型不匹配问题。此外,还对比了函数模板与类模板的关键特性,帮助读者全面理解C++模板编程的核心概念和实际应用。

ice55的博客 94

C++基础——函数重载

C++函数重载讲解

weixin_69283129的博客 6001

基于QPSO的IEEE33配电网重构:MATLAB实现与潮流计算详解

配电网重构是电力系统运行优化的重要环节,通过调整开关状态实现降低网损、提升电压质量,本质上是含强非线性潮流约束的大规模离散组合优化问题。求解这类问题的基础是准确高效的潮流计算,辐射状配电网中常用的前推回代法凭借收敛快、内存占用低等优势,成为IEEE33节点等经典算例的首选方法。在优化层面,传统遗传算法面对更大规模网络时易早熟收敛,而量子粒子群优化算法引入量子行为,通过平均最优位置和收缩扩张系数保持种群多样性,在离散开关编码空间中展现出更强的全局搜索能力。该技术广泛应用于配电网规划、运行方式优化以及算法对比验

weixin_34185512的博客 155

C++运算符重载函数

如果C++的运算符都无法用于类对象,对于类对象不能直接进行赋值运算,算术运算,关系运算,逻辑运算和输入输出操作,那么,类和对象的应用将受到很大的限制,影响类和对象的使用。在声明my_string类时,对运算符 + , - , * , / 都进行了重载,那么,使用这个类的用户在编程的时候完全不用考虑这个运算符重载函数是怎么样实现的,放心大胆地直接使用这些运算符进行操作,显然十分方便。运算符重载的方法是定义一个“重载运算符的函数”,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。

LC的专栏 2609

掌握C++编程:类、构造函数与运算符重载

本文深入探讨了C++编程中的关键概念,包括类的构造函数初始化、运算符重载以及模板类的使用。通过实例代码和详细解释,我们理解了如何正确地初始化const数据成员、如何重载运算符以扩展类的功能,以及如何使用模板来创建灵活且可重用的数据结构。此外,还涉及了类与类之间的复制构造函数和友元函数的正确使用,以确保数据的安全和类功能的正确实现。

weixin_34392511的博客 308

Unreal Engine鸿蒙移植实战:环境配置、构建流程与性能优化指南

游戏引擎移植是跨平台开发中的关键技术环节,其核心原理在于通过适配目标操作系统的底层接口和工具链,实现同一套代码在不同硬件和软件环境下的高效运行。这项技术的价值在于最大化代码复用率,降低多平台维护成本,并能让应用快速触达新兴生态系统的用户。在移动游戏和XR应用领域,随着鸿蒙HarmonyOS生态的快速发展,将成熟的商业引擎如Unreal Engine迁移至此平台,成为开发者探索新市场机会的重要路径。本文聚焦于Unreal Engine项目向鸿蒙系统的移植实践,详细解析了从环境搭建、源码适配到构建打包的全链路流

weixin_29011395的博客 402

C++运算符重载三种形式(成员函数,友元函数,普通函数)详解

三种重载方式 首先,介绍三种重载方式: 1 //作为成员函数重载(常见) 2 class Person{ 3 Private: 4 string name; 5 int age; 6 public: 7 Person(const char* name, int age):name(name),age(age){} 8 ...

weixin_34054931的博客 2410

MAPPO实战:从理论到代码的协作智能体训练指南

本文详细介绍了MAPPO算法在多智能体协作训练中的实战应用,从理论基础到代码实现全面解析。通过对比PPO与MAPPO的差异,深入讲解CTDE框架、网络架构设计、参数调优等关键环节,并提供实际项目中的调参经验和常见问题解决方案,帮助开发者快速掌握这一强化学习前沿技术。

weixin_42561040的博客 263

C++类和对象_04----运算符重载

总结1:对于内置的数据类型的表达式的的运算符是不可能改变的总结2:不要滥用运算符重载。

weixin_42296879的博客 1188

MySQL安装最后启动报错--Job for mysqld.service failed because the control process exited with error code. See

MySQL安装最后启动报错: [root@localhost mysql]# systemctl start mysqld Warning: mysqld.service changed on disk. Run 'systemctl daemon-reload' to reload units. Job for mysqld.service failed because the control process exited with error code. See "systemctl status m

chenchen的博客 2746

状态机设计与实现( stm32小车避障为例)

本文以STM32小车避障为例,介绍了状态机设计与实现方法。首先阐述了状态机的事件驱动特性、清晰结构和易扩展优势,并给出硬件组成框架。核心实现部分展示了状态枚举定义、状态转移图和主循环框架,通过switch-case结构实现状态切换。关键状态示例包括前方扫描和转向决策逻辑,通过传感器数据驱动状态转移。总结指出状态机设计需定义枚举状态、实现状态函数、使用switch跳转并更新全局状态。文章最后声明内容为学习笔记,欢迎读者指正交流。全文结构清晰,代码示例具体,为嵌入式系统状态机设计提供了实用参考。

2302_80219536的博客 1046

C++函数重载与模板:从同名函数到万能模板的编程实践

在C++编程中,函数重载和函数模板是实现代码复用和泛型编程的核心机制。函数重载允许同一函数名根据参数列表不同执行不同操作,体现了编译时多态性。函数模板则通过类型参数化,让同一套算法逻辑适用于多种数据类型,是泛型编程的基础。这两项技术能显著提升代码的抽象能力和可维护性,减少冗余代码。在工程实践中,它们广泛应用于数学运算、容器操作和算法库开发等场景。例如,通过函数重载处理不同类型的输入,或使用函数模板构建通用的查找算法。掌握函数重载与模板的协作与抉择,是编写高效、灵活C++代码的关键,尤其在构建复杂泛型算法库时

weixin_31856057的博客 261

STM32_DAC

DAC(Digital-to-Analog Converter,数模转换器)是将数字信号转换为模拟信号的外设,广泛应用于音频输出、波形生成、电机控制等场景。STM32F407 系列芯片配备了 2 个 DAC 通道(DAC1 和 DAC2),支持 12 位分辨率,支持多种触发方式,可输出稳定的模拟电压。本文从 DAC 的基本原理出发,详细讲解 STM32F407 DAC 的配置方法、代码实现、波形生成以及实际应用案例,帮助你快速掌握 DAC 的使用技巧。

轩宇的博客 1239

C++系列04:函数模板及函数重载全解析

同一个作用域内,函数名相同,参数列表(个数 / 类型 / 顺序)不同,就是重载函数。返回值不同不算重载参数名不同不算重载函数模板:用泛型(通用类型)写一套代码,支持多种数据类型调用。template2.语法格式template <typename T> // T 是通用类型(可改名)//<class T>返回值 函数名(T 参数)函数体eg1:定义为一种类型int main()add(1, 2);eg2:定义为不同类型。

2301_81587395的博客 441

科研级YOLOv8 Neck革新:HS-FPN模块赋能,让特征融合更高效且参数量直降100W的实战指南

在文件夹下新建HS_FPN.py,将上述和HS_FPN类的代码写入其中。这一步是为了让YOLOv8的代码架构能识别我们的自定义Neck模块。

FJN110的博客 150

基于 FPGA 的 CNN 卷积神经网络之池化层 Verilog 实现

池化层是卷积神经网络(CNN)中的关键组件,用于降低特征图的维度,减少计算量和防止过拟合。常见的池化操作包括最大池化和平均池化。FPGA 提供了高效的并行处理能力,可以加速这些操作。池化层在 CNN 中扮演重要角色,通过降低数据维度提升计算效率。在 FPGA 上实现池化层,可以充分利用硬件资源实现高效的并行计算,有助于提高实时应用中的推理速度。

走向CTO的路上... 1254

C++函数重载与模板:从静态多态到泛型编程的深度解析

在C++编程中,多态性是实现代码复用和灵活性的核心机制之一。静态多态(编译时多态)通过函数重载实现,允许在同一作用域内定义多个同名函数,编译器根据参数类型、个数或顺序自动选择最佳匹配版本,这基于函数签名和重载决议规则。然而,重载仅适用于已知的有限类型,缺乏扩展性。为此,C++引入了模板机制,支持泛型编程。模板作为代码生成器,允许定义参数化的函数或类蓝图,编译器根据具体类型实例化代码,实现真正的类型无关和代码复用。模板参数推导、非类型模板参数及特化等技术进一步增强了其表达能力。重载与模板的结合使用,形成了复杂

weixin_29266679的博客 221

【WRF理论第十四期】 VEGPARM.TBL 文件详解

WRF 读取 VEGPARM.TBL 文件

WW、forever的博客 575

C++函数模板与普通函数区别:从编译错误到重载决议机制详解

在C++编程中,函数重载是实现多态性的基础机制,允许同一作用域内存在多个同名函数。其核心原理在于编译器根据函数调用时的参数类型、数量及顺序,通过名称修饰(Name Mangling)技术生成唯一符号,从而在链接阶段区分不同函数。这一机制的技术价值在于提升代码的可读性和复用性,使得开发者能够用统一接口处理不同类型的数据。在泛型编程和标准模板库(STL)的应用场景中,函数模板进一步扩展了这一能力,它通过参数化类型生成代码蓝图,实现真正的类型无关算法。然而,当函数模板与普通函数共存时,重载决议(Overload

weixin_31856057的博客 239

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【C++】模板初阶

本篇到这里就结束了,主要写了模板的一些基本知识,希望对大家有所收获,祝大家天天开心!

春风不语。 1252

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C++函数模板面试核心:从类型推导到工程实践

泛型编程是现代C++的核心范式之一,它通过在编译时进行类型参数化,实现了代码的高度复用和类型安全。其基本原理是编译器根据调用时提供的实参类型,自动生成特定版本的函数代码,从而实现静态多态。这项技术的核心价值在于编写与具体类型无关的通用算法和数据结构,提升代码的灵活性和可维护性。在实际工程中,泛型被广泛应用于标准库容器、算法以及需要高性能和类型安全的业务组件开发。理解函数模板的类型推导规则、特化机制以及与SFINAE等高级特性的结合,是掌握现代C++的关键。本文聚焦于C++面试中高频出现的函数模板考点,深入解

weixin_30252709的博客 323

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C++模板与运算符重载:解决isEqualTo函数编译错误的完整指南

在C++编程中,函数模板是实现代码复用的重要手段,它允许开发者编写与类型无关的通用算法。其核心原理是通过编译期的类型推导和实例化,为不同类型生成特化的代码版本。这种技术价值在于提升代码的灵活性和可维护性,避免重复编写相似逻辑。然而,当模板与运算符重载结合时,常因类型匹配问题引发编译错误,特别是在涉及const正确性的场景中。例如,自定义类型的operator==若未正确声明为const成员函数,会导致模板实例化时无法匹配参数类型,这是C++模板编程中的典型陷阱。本文通过一个isEqualTo函数模板的调试案

weixin_31220401的博客 305

C++函数模板类型推导与重载决议深度解析:从笔试题到实战避坑

泛型编程是现代C++的核心特性之一,它通过模板机制实现了代码的复用和类型安全。其基本原理是编译器在编译时根据传入的实际类型生成特化的代码,这一过程称为模板实例化。理解模板类型推导的规则至关重要,它决定了模板参数如何从调用实参中推断出来,尤其是在处理引用、const限定符和值类别时。这项技术的核心价值在于编写高度通用且类型安全的算法和容器,极大地提升了代码的复用性和性能。在实际应用场景中,从STL容器到智能指针,再到各种通用算法库,模板无处不在。然而,当模板函数与非模板重载函数共存时,重载决议的规则决定了最终

weixin_34411563的博客 367

【C++】浅谈对模板的认识

注意:(1).typename是定义模板的关键字,可以用class,但是不可以使用struct代替class。对于上述例子,比较两个参数中较大的一个,并不能适用于字符串,因此,我们需要对于字符串这种类型进行特化。(1).模板本身不是一个类或者函数,编译器用模板产生指定类型的函数或类,这一过程称之为模板实例化。非模板类型形参是模板内部定义的常量,在需要常量表达式的时候,可以使用非模板类型参数。注意:(1)隐式实例化中,模板中不会出现类型转换,只会产生新的实例。模板类的特化可以分为:全特化,偏特化。

2401_87556590的博客 828

C++函数模板:泛型编程核心机制与实战应用详解

泛型编程是一种编程范式,其核心思想是编写独立于数据类型的代码,以提高代码的复用性和安全性。其原理是通过参数化类型,在编译时由编译器根据具体使用的类型自动生成对应的特化代码。这项技术的核心价值在于它能显著减少代码冗余,提升开发效率,并增强类型安全。在C++中,泛型编程主要通过模板技术实现,广泛应用于标准模板库(STL)的容器和算法、通用工具函数以及高性能数学库等场景。函数模板作为实现泛型编程的关键工具,允许开发者定义一份通用的函数蓝图,编译器据此进行模板实例化,为不同的类型参数生成具体的函数版本。理解模板特化

weixin_34279184的博客 288

【 C++ 模板初阶】Cyber泛型霓虹的 SFINAE 荒原 —— 一文带你搞通函数模板与类模板

本文介绍了C++中的泛型编程概念,重点讲解了函数模板的实现原理和使用方法。函数模板通过类型参数实现代码复用,编译器会根据调用时的实参类型自动生成对应的函数版本。文章内容包括: 泛型编程概念:通过模板实现与类型无关的通用代码 函数模板原理:编译器根据调用时的类型参数自动实例化特定版本 实例化方式: 隐式实例化:编译器自动推导类型 显式实例化:手动指定模板参数类型 文中通过交换函数和加法函数的示例,展示了模板如何避免重复编写不同类型参数的相似函数,提高代码复用性和可维护性。

枫亭湖区的博客 884
上一篇: C++ const用法
下一篇: string、vector等容器、迭代器要点
hancoder
博客等级 码龄9年 4135粉丝 167原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值