C++入门(5):定义个人函数
函数定义
函数原型通常安排在main()函数的定义之前;
定义函数时,可以给输入参数设置默认值,让这个参数成为可选的,但有一点必须注意:必须把所有的必选参数放在可选参数之前!!
内联函数
创建内联函数最直接的办法是使用 inline 关键字并在 main() 函数的前面定义它,所以内联函数不需要先为它定义原型;
某个函数被编译器当做内联函数来处理最直接的效果是:这个函数的调用将被替换为实际的函数代码,就像那些代码是写在main()函数里一样;
但是,即使使用了inline关键字,函数也并非肯定会被当做一个内联函数来对待。
函数的重载
一般来说,重载的函数最适用于需要对不同的数据类型进行相同处理的场合;我们无法通过只改变函数返回值的类型而重载一个函数。
如果只是想让一个参数能够接受(比如)两个或三个输入参数,把第三个输入参数定义为可选参数(让它有一个默认值)即可。
变量作用域
绕开变量作用域的办法之一是在发出函数调用时按引用传递;
函数内部的变量可以被声明为 static(静态) 的,函数内部的静态变量的值在程序的生命周期内即使经历多次函数调用也不会被自动重置,但它仍然是局部的。
#include <iostream>
void testStatic()
{
static int count = 0; //在子函数中定义静态变量病初始化为0
count++; //以后每调用一次此函数,静态变量值加1,并打印其值
std::cout << "count = " << count << std::endl;
}
int testMax(int a, int b, int c = 10)
{
if(10 == c) //有一个默认的第三参数,如果第三个参数为默认,即为比较两个数中最大的
{
return (a>b?a:b);
}
else
{
if(a > b && a > c )
{
return a;
}
else if(b > a && b > c)
{
return b;
}
else
{
return c;
}
}
}
int main(int argc, char** argv) {
int max;
max = testMax(3,7); //两个参数时的情况
std::cout << "max = " << max << std::endl;
testStatic();
testStatic();
testStatic();
return 0;
}
运行结果为
max = 7
count = 1
count = 2
count = 3 //每次调用testStatic(),count值加1
如果在main()函数中加入std::cout << count;
则会出错,因为虽然多次调用函数时,函数内部的静态变量不会被重置,但它仍然是局部的,主程序不能识别。