C++模板的定制二:定制C++类

C++模板编程 C++模板编程是一种强大的工具,它允许程序员编写与类型无关的代码,从而提高代码的复用性和灵活性。通过函数模板和类模板,程序员可以编写通用的函数和类,处理各种类型的数据。此外,模板还支持特化、元编程和变长参数等高级特性,进一步扩展了其应用范围。 阅读详情

 

C++模板的定制二:定制C++类

       类模板的基本语法如下:

       template <typename T>

       class classname

{

       ……

};

T可以是任何类型,下面我就举一个类模板的例子(请大家不要追究这个类子需不需要这样写或有没有意义,记住这只是举例,我们关心的应该是语言的特性,这才是最重要的,不是吗?)。

template <typename T>

class operation

{

public:

       operation(T t1,T t2):_val1(t1),_val2(t2){}

       ~operation(){}

       T plus()

       {

              return _val1+_val2;

       };

       T minus()  

       {

              return _val1-_val2;

       };

       T multiplies()    

       {

              return _val1*_val2;

       };

       T divides()

       {

              return _val1/_val2;

       };

 

private:

       T _val1,_val2;

};

这个类封装了四则运算,如果T为用户自定义类型,那么要求必须重载’+’、’-‘、’*’、’/’运算符。但当你以如下的方式声明类对象时,你将会碰到问题,或者你不想此类型有类似的操作。

char szarr1[]="yuankai";

char szarr2[]="winmain";

operation<char*> obj2(szarr1,szarr2);

cout<<obj2.plus()<<endl;               //你可能想要有不同的操作

cout<<obj2. divides()<<endl;                     //你可能根本就不充许有这样的操作

怎么办,当然是类定制。我们可以定制声明一个这样的类来解决这个问题。

class operation<char*>

{

public:

       operation(char* t1,char* t2):_val1(t1),_val2(t2){}

       ~operation(){}

       char* plus()

       {

              strcat(_val1,_val2);               //这里要注意溢出

              return _val1;

       };

       void display()

       {

              cout<<_val1<<endl;

              cout<<_val2<<endl;

       }

private:

       char *_val1,*_val2;

};

       这样我们再就可放心如下使用operation类了。

       char szarr1[]="yuankai";

       char szarr2[]="winmain";

       operation<int> obj1(1,5);

       operation<char*> obj2(szarr1,szarr2);

       cout<<obj1.divides()<<endl;

       obj2.display();

       cout<<obj2.plus()<<endl;

cout<<obj2.divides()<<endl;                     //会编译出错,因为没有divides()函数

由些可见类模板定制可以给我们充分的控制权,就象冷酸灵牙膏广告说的一样,想怎用(吃)就怎么用(吃)。不是吗?哈哈……

了解定制函数模板使我们在使用C++类时有更大的灵活性,给我们更大更自由的空间。

    文章写的仓促,有错别字或错误请大家多批评指出。欢迎和大家交流。如果大家觉的还可以我会继续写下出(-----袁凯-----)。

面向对象程序设计C++自定义类模板 自定义类模板内容很全,用到了大部分数据结构的知识 具体分为: 1.容器类模板:顺序表、链表、栈、队列、映射表 2.函数模板:冒泡、快速排序、堆排序、顺序查找、二分查找 3.应用:(1)四则表达式的运算(2)图的广度遍历 立即下载

相关推荐

红外通信不止遥控器:手把手教你用2ASK调制实现语音+温度数据同传

本文详细介绍了如何利用2ASK调制技术实现红外通信系统,同时传输语音和温度数据。通过STM32F103C8T6微控制器和DS18B20温度传感器的硬件设计,结合2ASK调制原理,展示了系统的完整实现方案。文章还提供了调试优化建议,适合电子爱好者和通信工程学生实践学习。

weixin_42531588的博客 388

c++ 定义模板

定义模板 当定义一个比较函数时,因为参数类型包括int、float、char等等,若为每个类型都定义一个比较函数,就不得不重复定义完全一样的函数体,并且需要确定要比较的所有类型,就比较麻烦了。 函数模板 : 以关键字开始 加一个模板参数列表 template <typename T> 这样就可以定义一个通用的函数模板,而不是为每一数据类型都定义一个新函数 template <typename T> int compare(const T &v1,const T &v

m0_56077202的博客 1821

“风色幻想XX:交错轨迹游戏卡顿:从解决d3dx9_xx.dll缺失开始——风色幻想XX优化指南

《风色幻想XX:交错轨迹》作为一款深受玩家喜爱的角色扮演游戏,以其丰富的剧情、独特的角色设定和精美的画面赢得了广泛的赞誉。然而,在游戏过程中,部分玩家可能会遇到游戏卡顿的问题,这不仅影响了游戏体验,还可能让玩家错失精彩的剧情和战斗瞬间。在众多导致游戏卡顿的因素中,d3dx9_xx.dll文件的缺失往往是一个不容忽视的原因。

czl922的博客 1258

Learn C++学习笔记:第十二章—模板template类和函数的特化(定制)

一、函数模板定制 函数模板可以实现对于不同的类型复用同一套代码,但是某些情况下,某些类型需要专门去实现,不能套用模板,举例比如对于数字相加

weixin_39548859的博客 744

遗传算法解整数规划IntCon

x = ga(fun,nvars,A,b,[],[],lb,ub,nonlcon,IntCon) IntCon就是代表整数的参量,描述的是哪几个自变量是0-1整数变量。比如navrs设置有4个变量,设置IntCon为[2 3],代表第2和第3个变量是整数。 再比如设置IntCon=2:2:nvars,代表偶数项的变量是整数。 值得注意的是一旦设置了非空的IntCon,则Aeqandbeqmust be an empty entry ([]), andnonlconmust re...

jianti9962的博客 9220

ndnSIM学习笔记(一)

在接下来的一段时间要用ndnSIM来做自己的仿真网络,需要系统的学习相关内容,以下为内容记录。1.安装      1.1核心依赖(必需的)             • python &gt;= 2.6             • libsqlite3             • libcrypto++             • pkg-config             • Boost lib...

gaonjzzz的博客 2985

C++ - 函数模板定制(function template specialization) 详解 及 代码

函数模板定制(function template specialization) 详解 及 代码 本文地址:http://blog.youkuaiyun.com/caroline_wendy/article/details/17223775 函数模板定制可以解决特定的模板参数, 需要特定的函数方法去实现; 注意函数模板定制是实例化模板, 而不是模板的重载; 有...

weixin_33724046的博客 179

高压控制单元与接触器 —— BMS电池的“高压大门”

高压接触器在BMS电池管理系统中扮演着“高压大门”的角色,负责控制电池包与整车高压母线的连接与隔离。接触器的工作原理基于线圈产生的磁力吸合接点,通过主触点接通高压电流路径,辅助触点检测状态,灭弧结构保护接点。预充电路的设计是为了避免直接连接大电容时产生的浪涌电流冲击,通过预充电阻逐步充电,确保系统安全上电。接触器控制策略包括顺序控制、辅助触点检测、温度监控、故障断电和背靠背MOS辅助控制,以确保系统的高效和安全运行。工程师在选择接触器型号、控制线圈、检测状态、软件冗余控制和预充失败保护等方面提供了具体建议。

weixin_43199439的博客 813

C++ 自定义模板详解

来编写通用的代码。模板可以使程序员编写出与类型无关的代码,从而使程序更具可重用性和灵活性。📖在C++中,有两种类型的模板:函数模板和类模板。函数模板可以定义一个通用的函数,使它适用于多种不同的数据类型。

fckbb的博客 2079

如何借助Gemini 3 Pro完成一篇文献精读?(劝收藏)

金句必须是原文的完整句子,并附上该句子在文中的大致位置。你是一名资深科研文献评估专家,请根据我提供的文献信息(标题、作者、期刊、时间、引用、摘要、结论、图表)依次输出:①影响力评估:按期刊、作者、时间、引用、问题重要性给出1–10分及简述;用上述方法再结合Gemini 3 Pro的辅助,原本需要3小时才能读完一篇文献,现在只需50分钟,不管是顶刊论文还是领域内冷门论文,都可以用这套方法,另外七哥设计的高阶精读提示词,需根据自己的文献内容做调整,希望这篇文章的方法能帮你高效精读文献,掌握文献的精华内容。

智能AI让学术科研更容易 1302

基于深度确定性策略梯度的永磁同步电机强化学习控制方法

本文提出了一种基于深度确定性策略梯度(DDPG)的永磁同步电机(PMSM)电流内环智能控制方法。首先建立了PMSM在d-q坐标系下的数学模型,分析了传统矢量控制双闭环系统中PI控制器的局限性。针对电流内环控制问题,设计了包含电流跟踪误差、转速信息和历史控制量的状态空间,将电压输出作为动作空间,并构建了兼顾跟踪精度和响应速度的奖励函数。通过DDPG算法训练智能体,使其能够自适应调整控制策略。仿真结果表明,与固定参数的PI控制器相比,DDPG控制器在动态响应速度和抗干扰能力方面具有明显优势,为PMSM高性能控制

huanghm88的专栏 104

C++模板的定制一:定制函数模板

前言       C++模板是C++的扩展,模板为C++注入了新的活力。C++模板分为函数模板和类模板。C++模板对于大多数C++程序员并不陌生。C++模板有一定的定制特性。C++模板的定制一:定制函数模板       函数模板的基本语法如下:       template        T fun(T t1,…){       return t1;}     

winmain的专栏 1836

用 CL_HTTP_CLIENT 正确处理 Cookie,彻底解决 SAP Gateway OData 的 CSRF Token 校验失败

SAP OData 集成中 CSRF Token 校验失败的解决方案 问题现象:使用 Postman 测试 OData 写入成功,但 ABAP 代码调用时出现 CSRF token validation failed 错误。 根本原因:Postman 自动处理 Cookie,而 ABAP 代码仅获取了 CSRF Token 却遗漏了 Cookie 信息。SAP Gateway 要求修改请求必须同时携带 Token 和 Cookie 才能通过校验。 解决方案: 通过 GET 请求同时获取 CSRF Token

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 431

C++模板的定制二:定制C++类 (转)

C++模板的定制二:定制C++类 (转)[@more@] C++模板的定制二:定制C++类XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:off...

csd3176的博客 259

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

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

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

C++模板的定制三:部分定制C++类

C++模板的定制三:部分定制C++类       类模板的多参语法如下:       template        class classname{       ……};T可以是任何类型,上一节我们介绍了定制类模板,本节说一下类模板的部分定制,意思就是说只定制模板参数的一部分,从而得到我们想要的目的,本节直接来描述其语法,我想信大家都不愿意我在这罗嗦,都想直接了解其语

winmain的专栏 1234

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C++模板的定制四:定制成员函数和缺省类参

  C++模板的定制四:定制成员函数和缺省类参一、             定制成员函数定制模板类成员函数,就是定义一个指定类型的类成员函数取代模板类定义的成员函数,实现特殊的功能,从而完成模板类成员函数的定制。       template        class classname{       public:              classname

winmain的专栏 1531

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C++模板的定制五:对定制成员函数的补充

C++模板的定制五:对定制成员函数的补充作者:袁小凯华南理工大学计算机研究所北区研发二部Email – ccplusplus@21cn.com 前言在” C++模板的定制四:定制成员函数和缺省类参 “一文中我简单介绍了模板类中成员函数的定制(全特化),但是有一细节还是说清楚的好,以免大家误解。在C++中不能局部定制模板类中的成员函数。再说一下模板类中的模板成员函数的用法。希

winmain的专栏 1032

C++模板(函数模板/类模板)

Ⅰ、编程 Ⅱ、函数模板 1、函数模板概念 2、函数模板格式 3、函数模板的原理 4、函数模板的实例化 1.隐式实例化 2.显示实例化 5、模板参数的匹配原则 ​编辑补充:函数不一定都能推演,但是类模板一定要指定 Ⅲ、类模板 1、类模板的定义格式 2、类模板的实例化 3、类外定义类模板参数 4、模板的分离编译......

qq_61386381的博客 1万+

C++模板特化:定制模板行为

本文介绍了C++模板特化的概念和应用。模板特化包括全特化和偏特化,允许为特定类型提供定制实现。全特化针对所有模板参数提供具体类型实现,而偏特化仅对部分参数特化。通过代码示例展示了如何为指针类型实现特化版本,并讨论了避免特化冲突的原则。模板特化能提高代码性能和灵活性,是模板编程的重要技术。文章还预告了后续将介绍模板元编程内容。

fykam的博客 1183

定制AI对话体验:llama.cpp的Minja模板引擎与聊天模板全攻略

你是否曾因AI对话格式混乱而困扰?想让模型输出更符合业务需求的交互样式?llama.cpp的模板系统提供了开箱即用的解决方案,无需深入代码即可定制专业对话流程。本文将带你掌握Minja模板引擎(llama.cpp内置的Jinja2兼容实现)的核心用法,通过3个实战案例从零构建企业级聊天模板。 ## 模板引擎架构:Minja与Jinja2的技术渊源 llama.cpp采用自主研发的Minja模板...

gitblog_00985的博客 793

掌握C++模板编程:Cpp-Primer-5th-Exercises第16章实战指南

C++模板编程是C++ Primer第5版第16章的核心内容,也是提升C++编程能力的关键技能。通过Cpp-Primer-5th-Exercises项目中的实战练习,你将系统掌握模板类、函数模板、模板特化等核心概念,轻松应对复杂的泛型编程挑战。 ## 为什么模板编程是C++开发者的必备技能 🚀 模板是C++实现泛型编程的基础,它允许你编写与类型无关的代码,大幅提高代码复用性和灵活性。在标准库

gitblog_00320的博客 936

【C++】- 模板

1 泛型编程 2 函数模板 2.1 函数模板概念 2.2 函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.5 模板参数的匹配原则 3 类模板 3.1 类模板的定义格式 3.2 类模板的实例化 3.3 类外定义类模板参数 4 模板的分离编译 5 缺省值

qq_1683086299的博客 1361

C++ 模板进阶:探索更强大的编程技巧

本文聚焦 C++ 模板进阶内容,涵盖非类型模板参数、类模板特化与模板分离编译。非类型模板参数可在编译时确定常量值,如用于指定数组大小等,应用广泛但使用有注意要点。类模板特化能为特殊类型提供定制化实现,包括全特化与偏特化,编译器依规则选择合适版本,其在标准库及实际编程中应用颇多。模板分离编译存在问题,将声明与实现分放不同文件易致链接错误,可通过放一起、显式实例化等方法解决,推荐把声明和实现放头文件并合理处理以确保正常编译与使用。

A Charmer 的博客 2621

深入理解模板进阶:掌握C++模板的高级技巧

C++模板进阶,全特化,偏特化,非类型模板参数,模板的分离编译

2301_77509762的博客 1640

【C++】C++模板特化:精准定制泛型逻辑

摘要:模板特化是C++泛型编程的重要特性,用于为特定类型提供定制化实现。分为全特化(所有参数特化)和偏特化(部分参数特化)两类,其中类模板支持两种特化,函数模板仅支持全特化。特化版本按最匹配原则优先调用,能解决类型差异问题并优化性能。典型应用场景包括处理特殊类型逻辑(如指针)和提升特定类型代码效率(如为不同数据结构选择最优算法)。模板特化增强了泛型代码的灵活性,在保持通用性的同时兼顾特殊需求。

Ape's IT Blog 1023

【C++】—— 模板介绍

模板的详细介绍

m0_56069910的博客 3255
上一篇: C++模板的定制三:部分定制C++类
下一篇: STL程序设计实践四:简化输入和提高可维护性
winmain
博客等级 码龄26年 5粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值