【带你吃透C++】 —— 函数模板与类模板

{

int a = 2, b = 5;

double m = 8.1, n = 3.2;

char c1 = ‘A’, c2 = ‘a’;

Swap(c1, c2);//自动识别类型

Swap(a, b);//自动识别类型

//C++库自带swap函数模板,直接用

swap(m,n);

cout << m << " " << n << endl;

cout << a << " " << b << endl;

cout << c1 << " " << c2 << endl;

return 0;

}

//用不同类型的参数使用函数模板时,称为函数模板的实例化。模板参数实例化分为:隐式实例化和显式实例

//化。

//1. 隐式实例化:让编译器根据实参推演模板参数的实际类型

template

T Add(const T& left, const T& right)

{

return left + right;

}

int main()

{

int a1 = 10, a2 = 20;

double d1 = 10.1, d2 = 20.2;

cout<<Add(a1, a2)<<endl;

cout << Add(d1, d2)<< endl;

//cout << Add(a1,d2) << endl;//错误

//注意:在模板中,编译器一般不会进行类型转换操作,因为一旦转化出问题,编译器就需要背黑锅

// 此时有两种处理方式:

//1. 用户自己来强制转化

cout << Add(a1,(int)d2) << endl;

cout << Add((double)a1, d2) << endl;

//2. 使用显式实例化,在函数名后的<>中指定模板参数的实际类型

cout <<Add (a1,d2) << endl;

cout << Add(a1, d2) << endl;

return 0;

}

//模板参数的匹配原则 完全匹配 > 函数模板 > 需要类型转换

// 专门处理int的加法函数(非函数模板类型)

int Add(int left, int right)

{

return left + right;

}

// 通用加法函数(函数模板类型)

template

T Add(T left, T right)

{

return left + right;

}

void Test()

{

Add(1, 2); // // 与非函数模板类型完全匹配,不需要函数模板实例化

Add(1, 2); // 因为使用了显式实例化,所以只能使用函数模板实例化

//两者都可以使用,因为非函数模板类型属于普通函数,普通函数可以隐式地进行自动类型转换

//但是如果有需要转换匹配的,它会优先选择实例化模板生成

Add(1.1, 2.3);//选择函数模板类型

}

struct TreeNode

{

//

};

//二.类模板

//普通类:类名就是类型

//类模板: 类名不是类型,类型是Stack

template

class Stack

{

public:

Stack(int capacity=4)

:_a(new T[acpacity])

,_top(0)

,_capacity(capacity)

{}

~Stack()

{

dalete[] _a;

_a = nullptr;

_top = _capacity = 0;

}

// 类里面声明,类外面定义

//注意:类模板中的成员函数若是放在类外定义时,需要加模板参数列表。

void Push(const T& x);

private:

T* _a;

int _top;

int _capacity;

};

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。

image

上述的面试题答案都整理成文档笔记。 也还整理了一些面试资料&最新2021收集的一些大厂的面试真题(都整理成文档,小部分截图)

image

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
整理成文档笔记。 也还整理了一些面试资料&最新2021收集的一些大厂的面试真题(都整理成文档,小部分截图)

[外链图片转存中…(img-F7Kn9OYq-1713412106744)]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
操作系统是计算机系统中的核心组成部分,负责管理和协调计算机硬件和软件资源,提供程序运行环境。在CSDN上有很多关于操作系统的专题文章,以下将从操作系统的基本概念、功能和常见类型等方面简要介绍一下。 首先是操作系统的基本概念。操作系统是一种系统软件,它是计算机硬件和应用软件之间的桥梁,提供给应用程序一系列的服务和资源,同时负责调度和管理系统资源。它为用户屏蔽了底层的硬件差异,提供了一个统一的、易于使用的界面。 操作系统主要有四个基本功能。首先是处理器管理,负责将处理器分配给系统中的各个进程,并进行进程切换,实现多道程序并发执行。其次是内存管理,管理计算机的内存资源,包括分配、回收和保护等操作。再次是文件管理,负责管理文件的存储、命名和保护等操作,提供了文件操作的接口。最后是设备管理,负责管理计算机的各种设备,包括输入输出设备和存储设备等。 常见的操作系统有多种类型。最主流的是Windows、Linux和Mac OS等桌面操作系统。此外还有服务器操作系统,如Windows Server和Linux等,用于管理和部署服务器。还有嵌入式操作系统,如Android和iOS等,用于移动设备和物联网设备。操作系统也有实时操作系统,用于需要实时控制和响应的系统,如工控系统和航空航天系统等。 总之,操作系统是计算机系统中不可或缺的重要组成部分,通过CSDN上的相关文章,我们可以更深入了解操作系统的基本概念、功能和不同类型。这些知识对于理解计算机系统的工作原理和提升编程能力都有着重要意义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值