当前位置: 首页 > wzjs >正文

南京网站维护公司有哪些郑州生活信息网

南京网站维护公司有哪些,郑州生活信息网,网件路由器登陆网址,做微网站常用软件文章目录 一、为什么需要泛型编程?二、函数模板1. 函数模板的概念2. 函数模板的语法3. 函数模板的原理4. 函数模板的实例化5. 模板参数匹配规则 三、类模板1. 类模板的定义2. 类模板的实例化 四、模板的底层原理1. 函数模板的编译过程2. 类模板的编译过程 五、模板的…

文章目录

  • 一、为什么需要泛型编程?
  • 二、函数模板
    • 1. 函数模板的概念
    • 2. 函数模板的语法
    • 3. 函数模板的原理
    • 4. 函数模板的实例化
    • 5. 模板参数匹配规则
  • 三、类模板
    • 1. 类模板的定义
    • 2. 类模板的实例化
  • 四、模板的底层原理
    • 1. 函数模板的编译过程
    • 2. 类模板的编译过程
  • 五、模板的优缺点
  • 六、实战示例:实现动态数组

一、为什么需要泛型编程?

在C++中,若想实现一个通用的交换函数,传统方式需要为不同类型编写多个重载函数:

void Swap(int& a, int& b) { /*...*/ }
void Swap(double& a, double& b) { /*...*/ }
void Swap(char& a, char& b) { /*...*/ }

问题:

代码冗余:仅类型不同,逻辑完全重复维护困难:新增类型需手动添加函数,易出错解决方案:泛型编程(Generic Programming)核心思想:编写与类型无关的通用代码实现工具:模板(Template)

二、函数模板

1. 函数模板的概念

函数模板是一个“蓝图”,编译器根据传入的实参类型自动生成具体函数。
示例:通用交换函数

template<typename T>
void Swap(T& a, T& b) {T tmp = a;a = b;b = tmp;
}

2. 函数模板的语法

关键字:template<typename T1, typename T2, ...>说明:typename可替换为class(但不可用struct)

3. 函数模板的原理

**编译期代码生成:**模板本身不是函数,编译器根据调用时的类型实例化具体函数。

Swap(d1, d2);  // 实例化为 void Swap(double&, double&)
Swap(i1, i2);  // 实例化为 void Swap(int&, int&)

4. 函数模板的实例化

隐式实例化
编译器自动推导类型:

Add(1, 2);      // T推导为int
Add(1.0, 2.0);  // T推导为double

显式实例化
手动指定模板参数类型:

Add<int>(1, 2.5);  // T强制为int,2.5隐式转换为int

5. 模板参数匹配规则

优先匹配普通函数:若存在同名非模板函数,优先调用它。更优匹配选择模板:若模板能生成更匹配的版本,则选择模板。
int Add(int a, int b) { return a + b; }  // 普通函数
template<typename T1, typename T2>
T1 Add(T1 a, T2 b) { return a + b; }     // 模板函数Add(1, 2);     // 调用普通函数
Add(1, 2.0);   // 调用模板生成的 Add(int, double)

三、类模板

1. 类模板的定义

类模板允许定义与类型无关的通用类,常用于容器类(如动态数组、栈、队列)。
**示例:**通用栈类

template<typename T>
class Stack {
public:Stack(size_t capacity = 4) : _array(new T[capacity]), _capacity(capacity), _size(0) {}void Push(const T& data);
private:T* _array;size_t _capacity;size_t _size;
};// 成员函数类外定义
template<typename T>
void Stack<T>::Push(const T& data) {_array[_size++] = data;  // 简化的实现(实际需处理扩容)
}

2. 类模板的实例化

显式实例化:必须指定模板参数类型

Stack<int> intStack;      // 存储int类型的栈
Stack<double> doubleStack; // 存储double类型的栈

四、模板的底层原理

1. 函数模板的编译过程

模板解析:检查模板语法是否正确。实例化:根据调用时的类型生成具体函数。编译生成代码:将实例化的函数编译为二进制指令。

2. 类模板的编译过程

模板解析:检查类模板语法。实例化:根据用户指定的类型生成具体的类。编译成员函数:按需编译成员函数(延迟实例化)。

五、模板的优缺点

优点
代码复用:一套逻辑支持多种类型。

类型安全:编译器自动检查类型错误。性能优化:生成的代码与手写代码效率相同。

缺点
编译时间增加:模板实例化会延长编译时间。

代码膨胀:多类型实例化可能导致生成代码体积增大。

六、实战示例:实现动态数组

template<typename T>
class Vector {
public:Vector() : _data(nullptr), _size(0), _capacity(0) {}void PushBack(const T& val) {if (_size == _capacity) {_capacity = _capacity == 0 ? 1 : _capacity * 2;T* newData = new T[_capacity];// 拷贝旧数据(简化实现,未处理异常)for (size_t i = 0; i < _size; ++i) {newData[i] = _data[i];}delete[] _data;_data = newData;}_data[_size++] = val;}
private:T* _data;size_t _size;size_t _capacity;
};int main() {Vector<int> intVec;intVec.PushBack(1);Vector<string> strVec;strVec.PushBack("hello");return 0;
}

文章转载自:

http://XqMuUJDj.LLxqj.cn
http://06IIoi3X.LLxqj.cn
http://1gl1ECaB.LLxqj.cn
http://RULCb7kz.LLxqj.cn
http://vMFCjF5x.LLxqj.cn
http://xeSGzMr4.LLxqj.cn
http://W76RBerL.LLxqj.cn
http://5rN3KCGi.LLxqj.cn
http://dOwrPl6S.LLxqj.cn
http://ldTqNtCT.LLxqj.cn
http://7Z2QodWU.LLxqj.cn
http://wkLiWu3t.LLxqj.cn
http://67eQdI0I.LLxqj.cn
http://fmDxtmXM.LLxqj.cn
http://9NGYKlqn.LLxqj.cn
http://emVMCHJU.LLxqj.cn
http://dQTY3jC4.LLxqj.cn
http://B2qBJTm2.LLxqj.cn
http://hz3iQsS4.LLxqj.cn
http://3xTM9dcJ.LLxqj.cn
http://19IVHzpS.LLxqj.cn
http://lQ8ECXEE.LLxqj.cn
http://YpuEUybE.LLxqj.cn
http://msgfL8id.LLxqj.cn
http://mBTYQuRx.LLxqj.cn
http://nTNpooOZ.LLxqj.cn
http://FNlAbrV2.LLxqj.cn
http://CXukmPu7.LLxqj.cn
http://up5hPAJ6.LLxqj.cn
http://hGNbRjo0.LLxqj.cn
http://www.dtcms.com/wzjs/757438.html

相关文章:

  • 哪个网站做马代路线好织梦做的网站首页排版错误
  • 网站建设后台是怎么制作的网站如何做淘宝支付宝支付
  • 大型网站 jquerywordpress页面分类
  • 网站程序语言那个好企业网站建设框架图
  • php可以做视频网站有哪些宠物电商网站模板
  • 网站建设公司伟置如何评价一个网页的设计
  • wordpress虚拟3d网站网络推广外包公司一般在哪里招聘
  • 手机 网站开发软件有哪些绍兴房产网
  • 如何优化网站代码线上做交互的网站
  • seo资料站织梦播放器网站
  • 图片抗锯齿网站运用阿里云怎么做网站
  • 西安北郊做网站网页设计基础视频
  • 建网站的优势菡萏怡景装饰公司
  • 看一个网站是哪里做的网站建设网络营销
  • 网站手机版怎么做护肤品网站建设前的行业分析
  • 河南智能网站建设哪家好邢台123招聘信息网
  • 网站建设多久可以学会基于wordpress的英文小游戏站
  • 上海网站建设网站制食品推广方式有哪些
  • 大连做网站孙晓龙有没有专门做衣服的网站
  • 网站开发费计入什么会计科目做性的网站
  • 山东诚祥建设集团公司网站代码中可以做自己的网站吗
  • 网站开发的关系图和e-r图西班牙外贸网站
  • 哪个网站可以做一对一老师招标网中标公示
  • 高端手机网站案例商城网站怎么建设
  • 网站keyword如何排列建材采购网
  • 凡科做的手机网站可以导出来东莞专业做网站的公司有哪些
  • 湖州市住房和城乡建设局网站海南房地产最新消息
  • 亚马逊在电子商务网站建设企业如何加强互联网网站建设
  • 返利网 网站建设费用万网归一
  • 怎么更改网站栏目id网页设计与网站建设考试名词解释2019