函数重载
在同一作用域内的几个函数名字相同但形参列表不同
当调用函数时,编译器会根据传递的实参推断调用哪个函数
不允许两个函数除了返回类型其他要素都相同
Record lookup(const Account &acct);
Record lookup(const Account &);//省略了形参的名字
//两个函数时相同的,形参的名字不影响形参列表内容
重载和const形参
顶层const不影响传函数的对象
一个拥有顶层const的形参无法和另外一个没有顶层const的形参区分开
Record lookup(Phone);
Record lookup(const Phone);//重复声明了Record lookup(Phone)
Record lookup(Phone*);
Record lookup(Phone* const);//重复声明Record lookup(Phone*)
const为底层const时,对于接受引用或指针的函数来说,对象是常量还是非常量对应的形参不同
Record lookup(Phone*);
Record lookup(const Phone&);
Record lookup(Phone*)
Record lookup(const Phone*)
内联函数(inline函数)
作用:函数调用需要时间和空间的代价,为了解决函数调用效率问题
原理:以空间为代价,节约时间
1.内联函数适合规模较小且频繁的函数
2.内联函数中不能有switch和循环
函数的缺省
如果一个函数的形参有默认值,那么该形参右边必须都有默认值
函数的定义和声明缺省函数,两者留其一
分享一个关于内存的题
int x1=30,x2=40;
void sub(int x,int y)
{
x1=x;x=y;y=x1;//交换x,y,由于无返回值,只有全局变量x1被保存下来
}
int main()
{
int x3=10,x4=20;
sub(x3,x4);//x1=x3=30,x4=20
sub(x2,x1);//x1=x2=40,x1=40
cout<<x3<<x4<<x1<<x2;//10,20,40,40
}
strcpy函数原理
char*strcpy(char*strDest,const char * strSrc)
{
if(strDest==NULL || strSrc == NULL)
return NULL;
char*temp=strDest;
while((*strDest++=&strSrc++)!='\0');
return temp;
}