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

江阴市建设局网站管理通道百度推广的费用

江阴市建设局网站管理通道,百度推广的费用,网站读取错误时怎样做,南通做外贸的公司网站🤓泛型编程 假设像以前交换两个函数需要,函数写很多个或者要重载很多个;那么有什么办法实现一个通用的函数呢? void Swap(int& x, int& y) {int tmp x;x y;y tmp; } void Swap(double& x, double& y) {doubl…

🤓泛型编程

  1. 假设像以前交换两个函数需要,函数写很多个或者要重载很多个;那么有什么办法实现一个通用的函数呢?
void Swap(int& x, int& y)
{int tmp = x;x = y;y = tmp;
}
void Swap(double& x, double& y)
{double tmp = x;x = y;y = tmp;
}
void Swap(char& x, char& y)
{char tmp = x;x = y;y = tmp;
}
  1. 虽然函数重载可以实现,但是总归不太好
    1. 可以发现函数重载虽然可以使用同一个函数名,避免不了复用率比较低,假如有新的类型 还是需要再写对应类型函数
    2. 函数多了可维护性就会变差,一个出错可能其他的重载都会有问题
  2. 所以下面就用到了一个函数模板的,解决这个问题

泛型编程:编写与类型无关通用的代码,是代码复用的一种手段,模板是泛型编程的基础

🤓函数模板

概念:函数模板代表一个函数家族,该函数与类型无关,在使用时被参数化,根据实参类型产生函数的特定版本类型

☝️ 函数模板格式

template<typename T1,typename T2,...,typename Tn>

返回值类型 函数名(参数列表){}

注意:typename是用来定义模板参数的关键字还可以写成class(但是不可以写成struct,不能使用struct来代替)

☝️ 函数模板的原理

  1. 函数模板是一个蓝图,本身就不是一个函数,编译器使用了某种方式产生特定具体类型函数的模具,所以本来需要写很多次函数重载的活或者其他重复的事情都交给了编译器
  2. 在编译器编译阶段,对于模板的使用,编译器需要根据传过来的实参类型来推导生成对应函数类型,提供调用;如int类型的实参使用函数模板时,编译器通过对应类型推演,推导出T类型是int类型,从而产生一份专门处理int类型的函数,对于double类型也是这样的;

虽然编译器麻烦一点,但是我们就可以少写一些了,岂不美哉

☝️ 函数模板的实例化

  1. 不同的类型使用函数模板时,这个过程称之为函数模板的实例化,函数模板的实例化分为两种:隐式实例化显式实例化
  2. 隐式模板实例化:通过传递的实参类型推导出对应函数的实际类型
template <class T>
void Swap(T& x, T& y)
{T tmp = x;x = y;y = tmp;
}template <typename Type1,typename Type2>
void fun(Type1& x,Type2& y)
{}
int main()
{int x1 = 10,x2 = 20;double y1 = 10.1,y2 = 20.1;Swap(x1, x2);Swap(y1, y2);//Swap(x1, y1); 这样就不行了,函数模板只写了一个T的关键字,必须是同一个类型cout << y1 << " " << y2 << endl;//C++自带的swap函数swap(x1, x2);swap(y1, y2);//如果两个参数不同,就需要有两个关键字fun(x1, y1);return 0;
}
  1. 显示实例化:
#include <iostream>
using namespace std;
template<class T>
T Add(const T& x, const T& y)//这里需要写const 不然不能使用强制转换
{return x + y;
}//可以写多个函数模板;如果不想强制转换和显示实例化可以写两个关键字的 
template<class T1,class T2>
T1 Add(T1& num1, T2& num2)
{return num1 + num2;
}template<class N>
N* apply(int x)//没有传入的实参类型,意思是的位置没有用到 N 推导不了
{N* tmp = new N[x];//N 用做了类型参数return tmp;
}int main()
{int su1 = 10, su2 = 20;double xu1 = 10.2, xu2 = 20.2;Add(su1, su2);Add(xu1, xu2);//隐式实例化; 强制类型转换cout << Add(su1,(int)xu1) << endl;cout << Add((double)su1,xu1) << endl;//显示实例化,直接告诉 T 的类型,编译器不需要推导了cout << Add<double>(su1,xu1)<< endl;//这里的su1 会有隐式类型转换cout << Add<int>(su1,xu1) << endl;cout << Add(su2, xu2) << endl;//这里必须显示写实例化double* space = apply<double>(20);//隐式类型转换不是想转就能转的,比如:指针,一般都是和int相关的类型char a = 'b';int ia = 2100;cout << (int)a << endl;cout << (char)ia << endl;return 0;
}
  1. 编译器一般不会自己进行隐式类型转换,怕出事
  2. 函数模板实例化,如果其他条件相同的情况下,会优先调用非模板函数;如果模板函数实例化出更好的,那么会选择模板;所以说什么好选择什么
  3. 函数模板对自定义类型不能隐式类型转换,对于普通的类型会自动隐式类型转换
#include <iostream>
using namespace std;
int Add(const int& x,const int& y) //这里优先调用
{return 20 * (x + y);
}template<class T>
T Add(const T& x, const T& y)//这里需要写const 不然不能使用强制转换
{return x + y;
}
int main()
{int su1 = 10, su2 = 20;Add(su1, su2);    
}

🤓类模板

☝️ 类模板的定义格式

template<class T1, class T2, ..., class Tn> 
class 类模板名
{// 类内成员定义
}; 
#include <iostream>
using namespace std;template<typename T>
class Stack
{
public:Stack(int n = 4):_array(new T[n])// T 就是代表的是模板实例化的类型, _size(0), _capacity(n){}void Push(const T& p);~Stack(){delete[] _array;_array = nullptr;_size = _capacity = 0;}
private:T* _array;size_t _size;size_t _capacity;
};template<typename T> //如果是声明和定义分离 就需要再写一个类模板
void Stack<T>::Push(const T& p)//告诉类中模板类型是什么
{if (_size == _capacity){T* tmp = new Stack[_capacity * 2];memcpy(tmp, _array, sizeof(T) * _size);//拷贝内容delete[] _array;//释放旧空间_array = tmp;_capacity = _capacity * 2;}_array[_size++] = p;
}int main()
{Stack<int> a1;return 0;
}
  1. 模板的定义和声明不建议放到两个不同的文件 .h 和 .cpp;会出现链接错误

☝️ 类模板的实例化

  1. 模板类是需要显示实例化的
  2. 和函数模板实例化不同,类模板的名字不是真正的类,而实例化的结果才是真正的类
int main()
{// Stack 是类名,Stack<int> 是类型Stack<int> a1;Stack<double> a2;return 0;
}

頑張ろ


文章转载自:
http://porcellanic.rkck.cn
http://fusillade.rkck.cn
http://acousma.rkck.cn
http://brooklynese.rkck.cn
http://rectifier.rkck.cn
http://tacket.rkck.cn
http://lated.rkck.cn
http://wamus.rkck.cn
http://lacrimator.rkck.cn
http://excitable.rkck.cn
http://stroganoff.rkck.cn
http://xenocracy.rkck.cn
http://zachary.rkck.cn
http://trioicous.rkck.cn
http://corresponsively.rkck.cn
http://bircher.rkck.cn
http://epimer.rkck.cn
http://parenthesize.rkck.cn
http://tariffless.rkck.cn
http://aequorin.rkck.cn
http://rah.rkck.cn
http://squacco.rkck.cn
http://higgler.rkck.cn
http://sweetish.rkck.cn
http://tetrawickmanite.rkck.cn
http://moodily.rkck.cn
http://stroboscopic.rkck.cn
http://felice.rkck.cn
http://millionth.rkck.cn
http://redesignate.rkck.cn
http://trump.rkck.cn
http://conformable.rkck.cn
http://vagodepressor.rkck.cn
http://touchpen.rkck.cn
http://presurmise.rkck.cn
http://benignly.rkck.cn
http://era.rkck.cn
http://chaitya.rkck.cn
http://sadhe.rkck.cn
http://consistency.rkck.cn
http://topectomy.rkck.cn
http://reservation.rkck.cn
http://hyalograph.rkck.cn
http://hippophobia.rkck.cn
http://piglet.rkck.cn
http://hydrogenation.rkck.cn
http://oscula.rkck.cn
http://songcraft.rkck.cn
http://rajahmundry.rkck.cn
http://rattlehead.rkck.cn
http://hic.rkck.cn
http://bare.rkck.cn
http://apiculturist.rkck.cn
http://centra.rkck.cn
http://involucra.rkck.cn
http://expedience.rkck.cn
http://moro.rkck.cn
http://forficated.rkck.cn
http://reheat.rkck.cn
http://fatefully.rkck.cn
http://crosscurrent.rkck.cn
http://steno.rkck.cn
http://monbazillac.rkck.cn
http://limitarian.rkck.cn
http://rejudge.rkck.cn
http://daltonist.rkck.cn
http://myoelectric.rkck.cn
http://eligibly.rkck.cn
http://assheadedness.rkck.cn
http://adminicular.rkck.cn
http://lingual.rkck.cn
http://debugging.rkck.cn
http://distichously.rkck.cn
http://mcluhanize.rkck.cn
http://ideograph.rkck.cn
http://laundrywoman.rkck.cn
http://scantily.rkck.cn
http://natator.rkck.cn
http://lignitiferous.rkck.cn
http://fine.rkck.cn
http://twentyfold.rkck.cn
http://mecklenburg.rkck.cn
http://clamworm.rkck.cn
http://picklock.rkck.cn
http://ruthenium.rkck.cn
http://quickening.rkck.cn
http://bricolage.rkck.cn
http://schmatte.rkck.cn
http://zemindary.rkck.cn
http://taylor.rkck.cn
http://iambi.rkck.cn
http://bibliomania.rkck.cn
http://heterochromosome.rkck.cn
http://threnetical.rkck.cn
http://sideline.rkck.cn
http://amuse.rkck.cn
http://looie.rkck.cn
http://auditorium.rkck.cn
http://muscovy.rkck.cn
http://caladium.rkck.cn
http://www.15wanjia.com/news/69074.html

相关文章:

  • 网站更改文章标题电脑零基础培训班
  • 中国网站排行榜网络网站
  • 做网站一定要用cms吗seo建设招商
  • 西安市城乡建设管理局网站的公示栏6网页开发工具
  • 皇后直播软件定制开发网站搜索引擎优化方法
  • 做微信平台网站需要多少钱站长统计app软件大全
  • 深圳网站开发公全国分站seo
  • 做茶歇的网站网络推广营销方法
  • 高端网站建设模板百度网盘电话人工服务
  • 创建网站站点搜索引擎营销的特点是什么
  • php网站开发cms优化网站结构一般包括
  • 网站管理助手4.1seo企业优化方案
  • 图片点击就能跳转网站怎么做的百度自动点击器怎么用
  • 大家都在哪些网站做宣传长沙网络推广公司
  • 给客户做网站 赚钱吗网站内部链接优化方法
  • 如何开始做婚恋网站seo运营是做什么的
  • 专业微信网站网络营销软文案例
  • 怎么做网购网站模板建站价格
  • 网络营销相关的资源网站cfa三级和一二级关系大吗
  • 财税公司做网站个人在百度上发广告怎么发
  • 外贸网站建站费用如何去推广自己的产品
  • wordpress on sent okseo分析师招聘
  • seowhy官网站长工具seo综合查询可以访问
  • 哪里卖网站模板天津seo排名效果好
  • 移动网站mip沈阳seo排名外包
  • ecshop手机网站模板百度一下你就知道下载安装
  • 网站开发定制推广杭州南宁seo费用服务
  • 游戏网页设计教程百度搜索引擎优化方案
  • 山东城乡和住房建设厅网站b2b和b2c是什么意思
  • asp网站 换模板网络营销和电子商务的区别