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

中国建设教育学会网站做衣服 网站

中国建设教育学会网站,做衣服 网站,隆尧网站建设,搜索引擎优化包括哪些5.1函数模板一、要点归纳1.定义函数模板2.实例化函数模板3.重载模板函数4.函数调用的匹配顺序一、要点归纳 1.定义函数模板 定义函数模板的一般格式如下&#xff1a; template<类型形参表> 返回类型 函数名&#xff08;形参表&#xff09; {函数体&#xff1b; }例如以…

5.1函数模板

  • 一、要点归纳
    • 1.定义函数模板
    • 2.实例化函数模板
    • 3.重载模板函数
    • 4.函数调用的匹配顺序

一、要点归纳

1.定义函数模板

  定义函数模板的一般格式如下:

template<类型形参表>
返回类型 函数名(形参表)
{函数体;
}

例如以下代码定义了一个绝对值的函数模板

template <class T>
T abs(T x)
{if(x<0) return -x;return x;
}

2.实例化函数模板

  函数模板式不能直接执行的,需要在实例化为模板函数后才能执行。例如abs(-10)用于实例化前面声明的函数模板,-10为int型,所以实例化为以下真正的模板函数:

int abs(int x)
{if(x<0)return -x;return x;
}

有关实例化函数模板的说明如下:

  • 和普通函数一样,如果函数模板定义放在实例化之后,需要对其声明。例如前面的abs函数模板的声明方式如下:
template <class T>
T abs(T x);
  • 虽然模板参数T可以实例化为各种类型,但是采用模板参数T的各参数之间必须保持完全一致。例如下面程序中存在错误:
template <class T>
T min(T x, T y)
{return (x > y) ? y : x;
}
void test01()
{int n = 3;char c = 'a';double d = 2.4;std::cout << min(n, n) << std::endl; // 正确std::cout << min(c, c) << std::endl; // 正确std::cout << min(d, d) << std::endl; // 正确// std::cout << min(n, c) << std::endl; // 错误// std::cout << min(d, c) << std::endl; // 错误// std::cout << min(n, d) << std::endl; // 错误
}
  • 在函数模板实例化时,template中定义的每个类型参数都应该得到明确的类型值,例如以下函数模板定义没有错误:
template <class T,class T>
T1 abs(T x)
{if(x<0) return -x;return x;
}

但执行abs(-10)时候会出现不能确定模板参数T1的错误。

  • 在函数模板实例化中显式给出类型参数的数据类型时,可以部分给出类型参数的数据类型。在李世华过程中按template中指定的顺序进行类型参数的匹配。例如有以下函数模板:
template <class T1,class T2>
T1 max(T1 x,T2 y)
{if (x>y) return x;else return y;
}

以下的函数模板实例化都是正确的:

max<int,char>(1,'a) //T1为int,T2为char,返回'a'的ascii码97
max<int>(1,2.5)     //T1为int,T2为double,返回2.5的int型2
  • 当类型形参表中含有用户定义的类类型时,需要在类中设计相关重载运算符。例如如下程序式正确的:
template <class T>
T max(T x, T y)
{return (x > y) ? x : y;
}class A
{int n;public:A(int x) : n(x) {}bool operator>(A s) // 重载运算符{if (n > s.n)return true;elsereturn false;}void display() { std::cout << n << std::endl; }
};
void test02()
{A a(1), b(2);max(a, b).display();
}

如果类中没有定义重载运算符“>”,则在模板函数max中会报错。

3.重载模板函数

  重载模板函数如下:

template <class T>
void dispArr(T *arr, int n)//函数模板1
{int i;for (i = 0; i < n; i++)std::cout << arr[i] << " ";std::cout << std::endl;
}
template <class T>
void dispArr(T *arr, int i, int j)//函数模板2
{int k;for (k = i; k < j; k++)std::cout << arr[k] << " ";std::cout << std::endl;
}
void test03()
{int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};double b[] = {9, 8, 7, 6, 5, 4, 3, 2, 1};std::cout << "a:";dispArr(a, 8);std::cout << "b:";dispArr(b, 2, 6);
}

4.函数调用的匹配顺序

  1. 调用函数时,首先寻找参数完全匹配的非模板函数,如果找到了,就调用。
  2. 在1寻找失败后,寻找一个函数模板,将其实例化,产生一个匹配的模板函数,若找到了就调用。
  3. 在1和2均失败后寻找非模板重载函数;
  4. 如果均失败,则报错;
http://www.yayakq.cn/news/906884/

相关文章:

  • 男女做爰高清免费网站花乡科技园区网站建设
  • 网站标题title为什么不能频繁的改网站如何做标题优化
  • 网站建设服务专业建站公司云服务器怎么搭建网站
  • 网站开发报价和开发周期网站新闻 写法
  • 网站上传办法工业互联网平台应用
  • 四川手机网站杭州哪家做外贸网站好
  • 个人网站设计介绍文字大连网络推广公司哪家好
  • 南阳网站怎么推广南宁网站平台
  • 网站文字大小合同模板网站
  • 烟台专业做网站公司wordpress 域名 ip
  • 免费个人网站建设大全html5的网站设计
  • 沙漠风网站建设工程资料代做网站
  • 网站没有被收录原因4399观看视频免费哔哩哔哩
  • 政务公开和网站建设自查报告广州网站推广技巧
  • iis 配置网站详解怎么看一个网站做得好不好
  • 网站建设格式合同建设钓鱼网站源码
  • 廊坊网站seo排名职业生涯规划大赛是什么
  • 专业做酒类营销的网站做网站备案要多久
  • php网站开发薪资 深圳建设网站有什么特点特色
  • 哪个网站服务器比较好河西苏州网站建设
  • 长沙做无痛肠镜东大医院l网站成都网站建设的公司
  • 株洲第三方网站建设哪家好怎样自己做电影网站
  • qq网站建设企业所得税怎么算案例
  • 宁波集团网站建设wordpress菜单小工具
  • 开源房产网站源码濮阳信息港
  • 黄岩城乡住房和建设局网站厦门哪些做鲜花的网站
  • 邢台手机网站建设报价wordpress quiz
  • 汕头市公司网站建设多少钱wordpress视频不全屏播放
  • 网站建设方案设计心得不做百度了 百度做的网站
  • 有关外贸的网站有哪些安溪网页设计