C++基础入门 – 函数

概述

函数是将经常被使用的代码封装起来,实现完成某个功能,以达到简化程序的目的。它可以根据用户传递的数据实现相应的功能。

函数定义

  • 返回值类型
  • 函数名
  • 参数列表
  • 函数体语句
  • return语句

语法:返回值类型 函数名 (参数列表){函数体语句 return语句 }

示例: 加法计算函数

int add(int a,int b)
{
int sum=a+b;
return sum;
}
//简化
int add(int a,int b)
{
return a+b;
}

注意:函数定义中的参数叫做形参,函数调用时候,传递的参数叫做实参,调用过程中会将实参的值传递给形参。

返回值类型

如果一个函数不需要返回值,声明返回值类型时可以写void

让笔者没想到的是,C++中赋值运算竟然支持函数调用返回作为左值参与赋值操作;

GetMax(a,b)=100;
int c=GetMax(a,b)=100;

函数声明

C++/C语言编译系统是由上往下编译的被调函数需要声明在主调函数之前不然由上往下的编译系统将无法识别。正如变量必须先声明后使用一样,函数也必须在被调用之前先声明。函数的声明可以与定义分离。注意:一个函数只能被定义一次,但可以声明多次。

这个是1970年的C语言的历史遗留问题,强制程序员在使用函数之前声明函数,允许编译器检查参数是否为预期类型,因为40年前,限制编译时间和内存都是我们需要考虑的因素,提前声明函数,这样编译器就可以一次执行(即只读取一次代码)。还有之前的机器内存比较小,这样的编写能让编译器能够在内存资源有限的机器上运行。

注意:函数的声明不等同于函数的定义,这两个是不同的概念。定义表示需要开辟一段空间,要参与到程序的实际运行当中。而声明则只是对编译系统的一个说明,告诉编译器这里有这么个东西。函数声明是对定义的函数的返回值的类型说明,以通知系统在本函数中所调用的函数是什么类型。不包含函数体。

示例-写在主调函数前

void add(int v)       
{ 
v+=1;
}  
int main()
{
add(v);
return 0;
}

注意:写在主调函数前,不需要额外声明。

 

示例-写在主调函数后

错误示例:

int main()
{
add(v);
return 0;
}
void add(int v)       
{ 
v+=1;
}  

注意:被调函数add如果写在主调函数后,那必须要在主调函数前声明一段函数声明。

正确示例:

int add(int v);//函数声明
int main() 
{ 
add(v);
return 0; 
}
void add(int v)       
{
  v+=1; 
} 

 

函数名

函数名的命名规则跟变量一样:C++语言基础入门(1)- 数据类型 - 麦瑞克博客 (unitymake.com)

值传递

当我们做值传递时候,函数的形参发生改变,并不会影响实参。

void add(int v)      
{  
v+=1;
cout<<v<<endl;//output -> 1
}   
int main()
{
int v=0;
cout<<v<<endl;//output -> 0
add(v);
cout<<v<<endl;//output -> 0
return 0;
}     

这是最普通的形参方式,当函数被调用时,实参的副本初始化形参,函数并没有访问调用所传递的实参,因此v+=1不会修改实参的值。对v的操作只是修改了实参的一个副本。

2022/10/19 23:30 夜安了,熄灯了,该洗洗睡了,明天继续。


2022/10/26 16:00 前几天事比较多,没怎么学C++

分文件编写

  1. 创建.h后缀的头文件
  2. 创建.cpp后缀的源文件
  3. 在头文件中写函数声明
  4. 在.cpp后缀的源文件写函数定义
  5. 引入头文件

假设我们需要编写一套相关功能,我们可以为它们创建一个头文件用来声明,创建一个源文件引入头文件,并定义那些函数,当源文件有需要引入别的文件时候,在头文件中引入源文件所需要的文件。在主调函数所在源文件中引入头文件,即可完成调用。

示例:

Program.cpp文件

#include "Module.h"
#include <iostream>
using namespace std;
#include "stdlib.h"
int main()
{
    TestMethod();
    system("pause");
    return 0;
}

Module.h头文件

#include <iostream>
using namespace std;
#include "stdlib.h"
void TestMethod();

Module.cpp文件

#include "Module.h"
void TestMethod()
{
    cout << "Success" << endl;
}

本文所有案例代码:

来源:诚通网盘 | 提取码:unitymake

 

函数进阶篇见文章:C++语言进阶-函数进阶篇|函数重载|默认参数|占位参数 - 麦瑞克博客 (unitymake.com)

Const修饰函数

const修饰的函数可以重载。在类中,被const修饰的成员函数,不能修改类中的数据成员,也无法调用非const的成员函数;

const类对象只能调用const成员函数,非const对象无论是否是const成员函数都能调用,但是如果有重载的非const函数,非const对象会优先调用重载后的非const函数。

作者:Miracle
来源:麦瑞克博客
链接:https://www.unitymake.com/archives/programming-life/cpp/2101
本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议,转载请注明!
THE END
分享
打赏
海报
C++基础入门 – 函数
概述 函数是将经常被使用的代码封装起来,实现完成某个功能,以达到简化程序的目的。它可以根据用户传递的数据实现相应的功能。 函数定义 返回值类型 函数名 ……
<<上一篇
下一篇>>
文章目录
关闭
目 录