《c++入门经典》笔记5

《c++入门经典》笔记5

第五章 调用函数

5.1函数是什么

函数是程序的一部分,可对数据执行操做并返回一个值。每一个c++至少有一个函数:main()ios

 

5.2声明与定义函数

编写函数代码前应该声明该函数,包括返回类型、函数名和形参列表c++

函数定义以前说过了,此处就略了。函数

例如:atom

int getArea(int length,int width);//函数声明

int getArea(int length,int width)
{
   return length * width;
}//函数定义

 

5.3在函数中使用变量

局部变量与全局变量:spa

局部变量:函数内建立的变量为局部变量,函数返回后,其全部局部变量都不能供程序使用。内存

全局变量:在c++中,可在函数(包括main()函数)外定义c++变量,这种全局变量在程序的任何地方均可用。函数外定义的变量的做用域为全局,音词可在程序的任何函数中使用ci

我认为,只要是被代码块{}所包裹起来的变量都是局部变量,而在代码块以外定义的变量则是全局变量作用域

程序清单5.3 Global.cppget

#include <iostream>
void convert();

float fahrenheit;
float celsius;

int main()
{
   std::cout<<"Please enter the temperature in Fahrenheit: ";
   std::cin>>fahrenheit;
   convert();
   std::cout<<"\nHere's the temperature in Celsius: ";
   std::cout<<celsius<<"\n";
   return 0;
}

void convert()
{
   celsius = ((fahrenheit - 32) * 5) / 9;
}

 

5.4函数形参

input

 

5.5从函数返回值

函数返回一个值或void。要从函数返回一个值,可以使用关键字return,并在它后面指定要返回的值。这个值能够是字面量、变量或表达式,由于全部表达式都生成一个值。

程序清单5.4 LeapYear.cpp

#include <iostream>
bool isLeapYear(int year);

int main()
{
   int input;
   std::cout << "Please enter a year: ";
   std::cin >> input;
   if (isLeapYear(input))
       std::cout << input << " is a leap year\n";
   else
       std::cout << input << " is not a leap year\n";
   return 0;
}

bool isLeapYear(int year)
{
   if (year % 4 == 0)
  {
       if (year % 100 == 0)
      {
           if (year % 400 == 0)
               return true;
           else
               return false;
      }
       else
           return true;
  }
   else
       return false;
}

 

5.6默认函数形参

程序清单5.5 AreaCube.cpp

#include <iostream>
int findArea(int length,int width=20,int height = 12);

int main()
{
   int length = 100;
   int width =50;
   int height = 2;
   int area;

   area=findArea(length,width,height);
   std::cout<<"First area: "<<area<<"\n\n";
   area=findArea(length,width);
   std::cout<<"second area: "<<area<<"\n\n";
   area=findArea(length);
   std::cout<<"Third area: "<<area<<"\n\n";
   return 0;
}

int findArea(int length,int width,int height)
{
   return (length * width * height);
}

 

5.7函数重载

c++中,能够有多个同名函数,只要他们的形参不一样便可,这称为函数重载,又称函数多态

多个重载版本的返回值能够相同,也能够不一样,然而,不能经过修改返回类型来重载函数,相反,形参类型与形参数量必须不一样

举例:

int average(int,int);
long average(long,long);
float average(float,float);//函数定义就不写了

调用函数average()时,只需传递合适的数据,就将调用相应的重载版本。

 

内联函数:

当定义函数时,c++编译器只在内存中建立一组指令,每当调用该函数时,都将跳转到这些指令,而函数返回时,将跳转到调用代码的下一行。若是程序调用了函数10次,每次都将跳转到同一组指令,即只有一个函数指令拷贝,而不是10个。跳转到函数和返回有必定的开销,若是函数包含的语句不多,就能够经过避免跳转来提升效率。在这种状况下,经过避免函数调用,程序的运行速度将更快。

声明c++函数时,若是使用了关键字inline,编译器将不会建立该函数,而将代码直接复制到调用它的地方,就像您在哪里输入了函数的语句同样。若是该内联函数被调用和10次,内联代码将总共复制10次,细微的速度改善可能因可执行程序的增大而抵消。

要将函数声明为内联的,可在函数原型中使用关键字inline。

inline int double(int);

而不用修改函数自己:

int double(int target)
{
   return 2 * target;
}

 

5.8自动肯定返回值类型

c++14新增的功能之一是,使用关键字auto让编译器自动推断函数的返回类型

程序清单5.6 AutoCube.cpp

#include <iostream>
auto findArea(int length,int width=20,int height = 12);\

auto findArea(int length,int width,int height)
{
   return (length * width * height);
}

int main()
{
   int length = 100;
   int width =50;
   int height = 2;
   int area;

   area=findArea(length,width,height);
   std::cout<<"First area: "<<area<<"\n\n";
   area=findArea(length,width);
   std::cout<<"second area: "<<area<<"\n\n";
   area=findArea(length);
   std::cout<<"Third area: "<<area<<"\n\n";
   return 0;
}
相关文章
相关标签/搜索