首页 > 其他分享 >【cpluscplus教程翻译】函数(Functions)

【cpluscplus教程翻译】函数(Functions)

时间:2023-05-28 18:12:53浏览次数:46  
标签:Functions return 函数 int void 教程 main cpluscplus cout

使用函数,可以独立完成代码任务
在c++中,函数是指有名字的语句组,可以被程序的其他点调用
最常见的定义函数语法为(也可以使用lambda表达式和重载调用操作符)
type name ( parameter1, parameter2, ...) { statements }
type是返回值类型,name是函数名,parameter是参数,statements是函数体

// function example
#include <iostream>
using namespace std;

int addition (int a, int b)
{
  int r;
  r=a+b;
  return r;
}

int main ()
{
  int z;
  z = addition (5,3);
  cout << "The result is " << z;
}

这里定义了两个函数,无论定义的顺序如何,C++程序一定先调用main函数,事实上,main函数是唯一被自动调用的函数,其他函数当且仅当被main函数调用后才会执行
上面这个例子声明一个变量后,调用函数。
调用函数后会返回调用点(现场保护和参数入栈)

// function example
#include <iostream>
using namespace std;

int subtraction (int a, int b)
{
  int r;
  r=a-b;
  return r;
}

int main ()
{
  int x=5, y=3, z;
  z = subtraction (7,2);
  cout << "The first result is " << z << '\n';
  cout << "The second result is " << subtraction (7,2) << '\n';
  cout << "The third result is " << subtraction (x,y) << '\n';
  z= 4 + subtraction (x,y);
  cout << "The fourth result is " << z << '\n';
}

函数没有返回值

函数用void表示没有返回值

// void function example
#include <iostream>
using namespace std;

void printmessage ()
{
  cout << "I'm a function!";
}

int main ()
{
  printmessage ();
}

也可以用void表示没有参数

main函数返回值

main函数如果没有返回值,编译器会隐式返回0,其他函数不会这么做
返回0通常表示程序正常运行,注意被shell调用时是否会判断返回值

传值和传引用

函数传值会用实参赋值形参,注意类的构造函数调用
传引用会影响外部变量

// passing parameters by reference
#include <iostream>
using namespace std;

void duplicate (int& a, int& b, int& c)
{
  a*=2;
  b*=2;
  c*=2;
}

int main ()
{
  int x=1, y=3, z=7;
  duplicate (x, y, z);
  cout << "x=" << x << ", y=" << y << ", z=" << z;
  return 0;
}

函数效率及常引用

一般的原则:除了基础类型,其他类型的参数尽量传引用,可以提高程序效率

string concatenate (const string& a, const string& b)
{
  return a+b;
}

内联函数

调用函数通常会有开销,比如现场保护,跳转,因此对于非常短的函数,可能把对应的指令赋值过去性能更好
inline会提醒编译器是否内联,本质上是在编译的时候进行替换,不一定编译器会采纳这个建议

inline string concatenate (const string& a, const string& b)
{
  return a+b;
}

函数默认参数

C++支持函数有默认值,请注意参数匹配的顺序,默认参数和非默认参数不能顺序乱写

// default values in functions
#include <iostream>
using namespace std;

int divide (int a, int b=2)
{
  int r;
  r=a/b;
  return (r);
}

int main ()
{
  cout << divide (12) << '\n';
  cout << divide (20,4) << '\n';
  return 0;
}

声明函数

变量需要先声明再使用,函数也是如此。变量可以声明的时候初始话,函数也可以声明的时候提供函数体,只是声明的话,可以不用加变量名,只要变量类型即可

// declaring functions prototypes
#include <iostream>
using namespace std;

void odd (int x);
void even (int x);

int main()
{
  int i;
  do {
    cout << "Please, enter number (0 to exit): ";
    cin >> i;
    odd (i);
  } while (i!=0);
  return 0;
}

void odd (int x)
{
  if ((x%2)!=0) cout << "It is odd.\n";
  else even (x);
}

void even (int x)
{
  if ((x%2)==0) cout << "It is even.\n";
  else odd (x);
}

尤其是互相调用的话,这种前向声明就更加重要了

递归

函数可以自己调用自己,对于某些情况,这种实现非常有效,本质上递归可以看成dfs搜索或者最短路径

// factorial calculator
#include <iostream>
using namespace std;

long factorial (long a)
{
  if (a > 1)
   return (a * factorial (a-1));
  else
   return 1;
}

int main ()
{
  long number = 9;
  cout << number << "! = " << factorial (number);
  return 0;
}

总结

函数本质上也是封装和抽象的体现

标签:Functions,return,函数,int,void,教程,main,cpluscplus,cout
From: https://www.cnblogs.com/xiaoweing/p/17437869.html

相关文章

  • 【教程】手把手教你如何修改ChatGPT的密码
    申请OpenAI成功后,如何修改OpenAI的密码?OpenAI并没有内置账号安全管理的选项,因此它其实并没有绑定任何手机号的,手机号只是一道机器验证,邮箱也是。所以如果你用邮箱注册了OpenAI的话,后面是无法修改更换邮箱的。下面教你如何修改ChatGPT的密码,手机电脑端均可修改:第一步,打开OpenAI登陆......
  • Git安装和配置教程:Windows/Mac/Linux三平台详细图文教程,带你一次性搞定Git环境
    Git是一款免费、开源的分布式版本控制系统,广泛应用于软件开发领域。随着开源和云计算的发展,Git已经成为了开发者必备的工具之一。本文将为大家介绍Git在Windows、Mac和Linux三个平台上的安装和配置方法,带你一次性搞定Git环境Windows平台安装Git首先,你需要从Git官网下载Window......
  • Git安装和配置教程:Windows/Mac/Linux三平台详细图文教程,带你一次性搞定Git环境
    Git是一款免费、开源的分布式版本控制系统,广泛应用于软件开发领域。随着开源和云计算的发展,Git已经成为了开发者必备的工具之一。本文将为大家介绍Git在Windows、Mac和Linux三个平台上的安装和配置方法,带你一次性搞定Git环境Windows平台安装Git首先,你需要从Git官网下载Windo......
  • Nessus漏洞扫描工具手把手安装详细教程
    1.下载链接:http://www.tenable.com/products/nessus/select-your-operating-system选择与你的系统对应的版本uname-a#查看自己系统的版本这里是我选择的版本2.安装找到下载位置并打开终端执行以下命令:dpkg-i文件名按照提示进行操作:查看启动状态:netstat-nt......
  • WPF入门教程系列二十六——DataGrid使用示例(3)
    WPF入门教程系列目录WPF入门教程系列二——Application介绍WPF入门教程系列三——Application介绍(续)WPF入门教程系列四——Dispatcher介绍WPF入门教程系列五——Window介绍WPF入门教程系列十一——依赖属性(一)WPF入门教程系列十五——WPF中的数据绑定(一) 五、DataGr......
  • 【教程】Word分离单面打印双面打印内容(清除所有超链接或锁定域)
    ✨Word分离单面打印双面打印内容由于论文正文需要双面打印其余部分都单面打印需要分别把单面打印双面打印分为两个文档分别导出PDF分离内容时由于正文内容被分离会导出PDF时会出现“错误!未定义书签”✨解决方案清除所有超链接清除超链接自然不会出现“错误!未定义书签”Ct......
  • MAC中文版 Final Cut Pro X(FCPX) V10.6.6 专属视频剪辑后期工具安装教程
    MAC中文版FinalCutProX(FCPX)V10.6.6专属视频剪辑后期工具安装教程FinalCutProX又名FCPX,是MAC上非常不错的视频非线性剪辑软件,它剪辑速度超凡,具有先进的调色功能、HDR视频支持,以及ProResRAW,让剪辑、音轨、图形特效、整片输出,支持主流的摄像机格式,是专业视频剪辑领......
  • Hexo+Github搭建免费博客教程(一)
    前言完全免费的搭建个人博客,没有任何收费,零基础小白也能上手,不需要编程基础,跟着操作来即可。首先:要了解一下我们搭建博客要用到的框架:Hexo是高效的静态站点生成框架,它基于Node.js。通过Hexo,你可以直接使用Markdown语法来撰写博客。相信很多小伙伴写工程都写过README.md文件吧,对,就是......
  • PS新手教程-如何使用PS把双人照变成单人照?
    如何使用PS把双人照变成单人照?给大家介绍如何使用PS把双人照变成单人照,一起来看看吧。1.打开PS,导入素材图片,用套索工具将合照其中一人圈起来。2.点击编辑-内容识别填充,把不被识别的人物擦去。3.按回车键即可,就从双人照变成单人照啦。以上就是如何使用PS把双人照变成单人照的全部内容......
  • ANSYS 2023 R1 软件安装教程ANSYS2023R1软件安装包下载
    [名称]:ANSYS2023 R1[大小]:20.76GB[语言]:中/英文[适用系统]:win10,win11[简介]:ANSYS是融结构、流体、电场、磁场、声场分析于一体的大型通用有限元分析软件。[64位下载地址]:https://pan.baidu.com/s/1UBP7E9spof8j-YQ82RCcfg密码:gdrr安装有问题或需要远程安装请联系:人工客服安装步......