为了激励(鞭策)自己每天的学习,那就记录下好了。刚好没有太多可以敲代码的地方,很多概念的东西不记一下感觉没学过一样。那么今天学习的是函数模板、函数重载、单独编译、作用域和链接。
重载的特性是函数名相同,至少有一个形参类型不同或形参数目不同,返回类型可以不同。
函数模板就是
template<typename T>swap(T &a,T &b){
T temp=a;
a=b;
b=temp;
}
T可以是任何类型的,在使用时会根据数据类型自动变化。
然而会有例如数组等无法使用的情况,这时需要显式具体化。
struct student{
string name;
int num;
};
template<>swap<student>(student &a,student &b){
student temp;
...;
}
还有显式实例化
template swap<student>(student &a,student &b);//不明白作用
然后编译器会自动选择最合适的函数模板来使用,当有同样合适度的函数时会报错ambiguous(二义性)。
/*******************************************************************************************************************************/
再然后是关于头文件的讲解,我也终于明白了一件以前一直不明白的事情:
为什么.h文件中要写#ifdef...#endif?
因为这是为了防止重定义,.h文件中是各种结构、类、函数的申明,如果将头文件重复引用,就会引起这个问题。
这时就使用
#ifndef HEADFILE_H_
#define HEADFILE_H_
...//程序内容
#endif
这种方法,没定义时会定义一个该文件名称,当定义之后就不再进入程序部分。
找到一个好理由结束今天的学习,不过算是一个好的开始,需要记录的话对我来说学习效率高太多了。