栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c++入门学习日志:初阶 模板

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c++入门学习日志:初阶 模板

模板就好像一个模子,我们知道古时候会用到各种各样的模子来制作东西,而这种模子就好像是我们的模板一样。模板是模板和它所产生的类或者函数是不一样的,我们产生的类或者函数用的可不是模板  模板分为:函数模板 和 类模板

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

template //class可以用typename替代,但是不能使用struct。后面只能跟一个函数
void swap(T& p, T& q)
{
	T tmp = p;
	p = q;
	q = tmp;
}

int main()
{
    int a=1,b=2;
    swap(a,b);
}

 这个就是一个函数模板的典型案例,我们调用它时,调用的函数模板产生的函数,不是模板的本身。函数模板的类型一般是编译器根据实参传给形参推演出来的,但是有的时候还是需要我们自己去显示实例化的,比如:test(10); 

模板参数也是可以给缺省参数的哦 :

template 
void swap(T& p, T& q)
{
	T tmp = p;
	p = q;
	q = tmp;
}

int main()
{
    int a=1,b=2;
    swap(a,b);
}

模板也是可以声明和定义分离的,但不支持把他们放到两个文件里面,这样会出现链接错误,因为那些放在.c文件的定义,链接是找不到这些函数模板调用的地址,除非你去显示实例化指定:

template;
void swap(int& p,int& q);
template 
void swap(T& p, T& q);


template 
void swap(T& p, T& q)
{
	T tmp = p;
	p = q;
	q = tmp;
}
template //模板参数可以有多个
class date
{
public:
	date(int a = 1);

private:
	int _hour;
	int* _a;
};

template 
date::date(int a)
{
	_hour = a;
	_a = new T[10];
}

 大家觉得这样的代码对嘛:

template 
void swap(T& p, T& q)
{
	T tmp = p;
	p = q;
	q = tmp;
}

int main()
{
    int a = 1;
    double = 2.0;
    swap(a,b);
}

这样肯定是不行的,编译器在判断T的时候就会矛盾,可以怎么解决呢?

swap(a,b);
swap(a,b);

如果现在有一个函数,还有一个函数模板,模板除了参数是模板参数以外其他都和我们得函数相同,大家觉得这个函数和这个函数模板可以同时存在嘛?存在时调用又是先用哪一个呢

这两个肯定是可以同时存在的,他们完全两种不同的东西,调用的时候自然也是调用我们已经写好的函数,编译器也会图方便去调用更便捷那个 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/977057.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号