恋爱脑学编程之C++模板编程大冒险

在这里插入图片描述

一、模板编程初相识:开启泛型编程魔法之旅

嘿,小伙伴们!今天咱们要一起探索C++中超级厉害的模板编程。它就像是一把万能钥匙,可以打开各种类型数据的大门,让咱们写出超酷的与类型无关的代码,大大提高代码的复用性和灵活性哦!

二、函数模板:距离计算的奇幻变身

  1. 语法魔法棒
    函数模板的语法就像这样哦:
template <typename T>
return_type function_name(T parameter) {// 函数体
}

这里的<typename T>就像是一个魔法咒语,声明了一个神秘的模板参数T,它可以代表任何类型哟!return_type是函数返回的类型,function_name就是函数的大名啦,T parameter表示函数的参数,类型就是那个神秘的T
2. 距离计算秀
想象一下,在一个故事中,主人公总是想知道和爱人之间的距离。咱们就用模板函数来实现这个超酷的功能吧!

#include <iostream>
#include <cmath>// 模板函数:计算两点之间的距离
template <typename T>
T calculateDistance(T x1, T y1, T x2, T y2) {return std::sqrt(std::pow(x2 - x1, 2) + std::pow(y2 - y1, 2));
}int main() {// 使用整数类型计算距离,就像主人公计算和爱人在整数坐标下的距离int x1 = 0, y1 = 0, x2 = 3, y2 = 4;std::cout << "Distance between (0, 0) and (3, 4): " << calculateDistance(x1, y1, x2, y2) << std::endl;// 使用浮点类型计算距离,也许是更精确的测量呢double x3 = 0.0, y3 = 0.0, x4 = 3.0, y4 = 4.0;std::cout << "Distance between (0.0, 0.0) and (3.0, 4.0): " << calculateDistance(x3, y3, x4, y4) << std::endl;return 0;
}

看,这个calculateDistance函数模板就像一个魔法盒子,不管你放进去整数还是浮点数类型的坐标,它都能算出两点之间的距离。是不是超级厉害呀!

三、类模板:情侣信息管理的秘密基地

  1. 语法宝藏图
    类模板的语法是这样滴:
template <typename T>
class class_name {// 类成员
};

和函数模板类似,<typename T>也是魔法咒语,class_name就是咱们创建的类的名字啦。
2. 情侣信息大管家
情侣们的信息可重要啦!咱们用类模板来管理这些甜蜜的信息吧。假设情侣的信息有姓名和感情指数哦。

#include <iostream>
#include <string>// 类模板:情侣信息管理
template <typename T>
class Couple {
public:std::string name;T affection;Couple(std::string name, T affection) : name(name), affection(affection) {}void display() const {std::cout << "Name: " << name << ", Affection: " << affection << std::endl;}
};int main() {// 使用整数类型存储感情指数,比如用100分制来表示感情Couple<int> couple1("Alice", 90);couple1.display();// 使用浮点类型存储感情指数,也许更细腻的感情需要小数来表示哦Couple<double> couple2("Bob", 85.5);couple2.display();return 0;
}

哇哦,Couple类模板就像一个神奇的情侣信息宝库,可以根据我们的需要用不同类型来存储感情指数。无论是整数还是浮点数,都能把情侣们的甜蜜信息管理得井井有条。

四、模板特化:特殊情感的专属表达

  1. 语法秘籍
    模板特化的语法有点特别哦:
template <>
return_type function_name<specific_type>(specific_type parameter) {// 特化实现
}template <>
class class_name<specific_type> {// 特化实现
};

这里的<>里没有typename T啦,直接写上我们想要特化的特定类型specific_type
2. 特殊情感密码
有些情感表达是特别的。比如说,对于字符串类型的情感表达,我们想给它一个超级浪漫的输出格式。这时候就轮到模板特化出场啦!

#include <iostream>
#include <string>// 模板函数:情感表达
template <typename T>
void expressLove(T emotion) {std::cout << "Emotion: " << emotion << std::endl;
}// 特化实现:字符串类型的情感表达
template <>
void expressLove<std::string>(std::string emotion) {std::cout << "Whispers: " << emotion << " with a gentle smile." << std::endl;
}int main() {// 使用整数类型表达情感,就像简单的数字代表爱的程度expressLove(100);// 使用字符串类型表达情感,触发特化实现,来一场浪漫的低语expressLove("Love");return 0;
}

当我们用字符串类型的“Love”作为参数时,就会触发特化的魔法,输出一个超级浪漫的带有特殊格式的情感表达。是不是感觉模板特化就像为爱情故事中的特殊时刻准备的秘密武器呢?

五、总结:模板编程的浪漫收获

好啦,小伙伴们!我们的C++模板编程冒险之旅就要结束啦。模板编程真的是一个超级强大的工具哦,就像在爱情里给我们提供了各种浪漫的可能性。通过函数模板和类模板,我们可以像魔法师一样编写适用于各种类型的代码,而模板特化又能让我们在特殊情况下给特定类型定制专属的功能。希望这个教程能像一颗爱的种子,在你心中种下对C++模板编程的热爱,让你在编程的世界里创造出更多浪漫又实用的代码哦!加油,下次再见啦!😘

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/66441.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

enzymejest TDD与BDD开发实战

一、前端自动化测试需要测什么 1. 函数的执行逻辑&#xff0c;对于给定的输入&#xff0c;输出是否符合预期。 2. 用户行为的响应逻辑。 - 对于单元测试而言&#xff0c;测试粒度较细&#xff0c;需要测试内部状态的变更与相应函数是否成功被调用。 - 对于集成测试而言&a…

继承(5)

大家好&#xff0c;今天我们继续来学习继承的相关知识&#xff0c;来看看子类构造方法&#xff08;也叫做构造器&#xff09;是如何做的。 1.6 子类构造方法 父子父子,先有父再有子,即:子类对象构选时,需要先调用基类构造方法,然后执行子类的构造方法 ★此时虽然执行了父类的…

VulnHub-Acid(1/100)

参考链接&#xff1a; ​​​​​​​【VulnHub】Acid靶场复盘-CSDN博客 靶场渗透&#xff08;二&#xff09;——Acid渗透_ambassador 靶场渗透-CSDN博客 网络安全从0到0.5之Acid靶机实战渗透测试 | CN-SEC 中文网 Vulnhub靶场渗透练习(四) Acid - 紅人 - 博客园 红日团队…

51c自动驾驶~合集45

我自己的原文哦~ https://blog.51cto.com/whaosoft/13020031 #运动控制和规划控制需要掌握的技术栈~ 各大垃圾家电造车厂又要开始了~~~​ 1、ROS的通信方式 李是Lyapunov的李&#xff1a;谈谈ROS的通信机制 话题通信和服务通信&#xff0c;其中话题通信是通过发布和订阅…

【Unity3D】AB包加密(AssetBundle加密)

加密前&#xff1a; 加密后&#xff0c;直接无法加载ab&#xff0c;所以无法正常看到ab内容。 using UnityEngine; using UnityEditor; using System.IO; public static class AssetBundleDemoTest {[MenuItem("Tools/打包!")]public static void Build(){//注意:St…

平面坐标转大地坐标(arcgisPro中进行)

1、将需要转换的红线导入arcgisPro中&#xff0c;如下&#xff1a; 2、在地图菜单栏中&#xff0c;选择坐标转换工具&#xff0c;如下&#xff1a; 3、打开坐标转换工具 4、开启捕捉 5、 设置大地坐标显示格式 6、如下&#xff1a; 7、显示如图&#xff1a; 8、再依次添加几个待…

Python 在PDF中添加数字签名

在数字化时代&#xff0c;文件的安全性和可信度变得尤为重要。无论是商业文件、法律文件还是个人文件&#xff0c;都可能需要证明其来源的真实性和完整性。PDF数字签名就是解决这些问题的关键工具。PDF数字签名不仅能够确保文件的安全性&#xff0c;还能提高工作效率&#xff0…

Mysql--基础篇--函数(字符串函数,日期函数,数值函数,聚合函数,自定义函数及与存储过程的区别等)

MySQL提供了丰富的内置函数&#xff0c;涵盖了字符串处理、数值计算、日期和时间操作、聚合统计、控制流等多种功能。这些函数可以帮助你简化SQL查询&#xff0c;提升开发效率。 除了内置函数&#xff0c;MySQL还支持自定义函数&#xff08;User-Defined Functions&#xff09;…

STM32学习(十)

I2C模块内部结构 I2C&#xff08;Inter-Integrated Circuit&#xff09;模块是一种由Philips公司开发的二线式串行总线协议&#xff0c;用于短距离通信&#xff0c;允许多个设备共享相同的总线‌。 ‌硬件连接简单‌&#xff1a;I2C通信仅需要两条总线&#xff0c;即SCL&…

尚硅谷· vue3+ts 知识点学习整理 |14h的课程(持续更ing)

vue3 主要内容 核心&#xff1a;ref、reactive、computed、watch、生命周期 常用&#xff1a;hooks、自定义ref、路由、pinia、miit 面试&#xff1a;组件通信、响应式相关api ----> 笔记&#xff1a;ts快速梳理&#xff1b;vue3快速上手.pdf 笔记及大纲 如下&#xff…

【Ubuntu20.04】Apollo10.0 Docker容器部署+常见错误解决

官方参考文档【点击我】 Apollo 10.0 版本开始&#xff0c;支持本机和Docker容器两种部署方式。 如果您使用本机部署方式&#xff0c;建议使用x86_64架构的Ubuntu 22.04操作系统或者aarch64架构的Ubuntu 20.04操作系统。 如果您使用Docker容器部署方式&#xff0c;可以使用x…

安卓14无法安装应用解决历程

客户手机基本情况&#xff1a; 安卓14&#xff0c;对应的 targetSdkVersion 34 前天遇到了安卓14适配问题&#xff0c;客户发来的截图是这样的 描述&#xff1a;无法安装我们公司的B应用。 型号&#xff1a;三星google美版 解决步骤&#xff1a; 1、寻找其他安卓14手机测试…

利用 NineData 实现 PostgreSQL 到 Kafka 的高效数据同步

记录一次 PostgreSQL 到 Kafka 的数据迁移实践。前段时间&#xff0c;NineData 的某个客户在一个项目中需要将 PostgreSQL 的数据实时同步到 Kafka。需求明确且普遍&#xff1a; PostgreSQL 中的交易数据&#xff0c;需要实时推送到 Kafka&#xff0c;供下游多个系统消费&#…

Zookeeper是如何保证事务的顺序一致性的?

大家好&#xff0c;我是锋哥。今天分享关于【Zookeeper是如何保证事务的顺序一致性的?】面试题。希望对大家有帮助&#xff1b; Zookeeper是如何保证事务的顺序一致性的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Zookeeper 通过多个机制来保证事务的顺序一…

电脑如何无线控制手机?

想在电脑上无线控制手机&#xff0c;需要用到Total Control控制软件&#xff0c;具体步骤如下&#xff1a; 1、首先我们在电脑上安装上控制软件Total Control并打开。 2、开启手机USB调试和ADB仅充电模式。 3、手机电脑均连接上相同局域网。 4、连接(首次使用需要用手机U…

内网穿透的应用-自托管文件分享系统PicoShare搭建流程与远程共享实战教程

文章目录 前言1. 本地安装Docker2. 本地部署PicoShare3. 如何使用PicoShare4. 公网远程访问本地 PicoShare4.1 内网穿透工具安装4.2 创建远程连接公网地址 5. 固定PicoShare公网地址 前言 大家好&#xff01;在数字化时代&#xff0c;文件共享变得越来越重要&#xff0c;尤其是…

STM32 拓展 电源控制

目录 电源控制 电源框图 VDDA供电区域 VDD供电区域 1.8V低电压区域 后备供电区域 电压调节器 上电复位和掉电复位 可编程电压检测器(PVD) 低功耗 睡眠模式(只有CUP(老板)睡眠) 进入睡眠模式 退出睡眠模式 停机(停止)模式(只留核心区域(上班)) 进入停…

内蒙古水系详细很全shp格式arcgis软件无偏移坐标下载后内容测评

标题中的“内蒙古水系详细很全shp格式arcgis软件无偏移坐标”指的是一个地理信息系统&#xff08;GIS&#xff09;数据集&#xff0c;该数据集详细记录了内蒙古地区的水系信息&#xff0c;并以ESRI公司的标准矢量数据格式——Shapefile&#xff08;.shp&#xff09;进行存储。S…

【Rust自学】10.6. 生命周期 Pt.2:生命周期的语法与例子

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 10.6.1. 生命周期标注语法 生命周期的标注并不会改变引用的生命周期长度。如果某个函数它制定了泛型生命周期参数&#xff0c;那么它就可…

HTML 显示器纯色亮点检测工具

HTML 显示器纯色亮点检测工具 相关资源文件已经打包成html等文件&#xff0c;可双击直接运行程序&#xff0c;且文章末尾已附上相关源码&#xff0c;以供大家学习交流&#xff0c;博主主页还有更多Html相关程序案例&#xff0c;秉着开源精神的想法&#xff0c;望大家喜欢&#…