C++语言入门_05 函数的定义和使用

C++语言入门_05

蓝桥云课学习记录打卡 2022/02/18


前言

在 C++ 中,函数是一组给定名称的语句。每个 C++ 程序都必须有一个主函数 main(),它是程序执行的起点。一个 C++ 程序由一个主函数和若干子函数组成。

  • 函数的定义
  • 函数的声明与调用
  • 参数传递
  • 默认参数
  • 函数重载

一、函数的定义

C++ 中的函数分为 C++ 标准库函数自定义函数。使用标准库函数需要包含特定的头文件,比如使用 vector 功能时,需包含头文件#include<vector>。而自定义函数是用户自定义命名和声明的一组语句,其基本结构为:

type name(parameter list){
    code
}

其中 type 为函数的返回值类型;name 为函数的名称,也是调用函数所使用的标识符;parameter list 为传递给函数的参数列表;code 为函数的主体,存放函数需要执行的语句。例如我们定义一个 add 函数:

int add(int a,int b){
    return a + b;
}

add 函数的功能是利用 return 关键字返回 a 加 b 的和。

二、函数的声明与调用

函数的声明

如果希望在定义函数前调用函数,则需要在调用函数前声明函数,其结构为:

type name(parameter list);

其中 type 为函数的返回值类型;name 为函数的名称;parameter list 为传递给函数的参数列表。例如上例的 add 函数,如果要在定义 add 函数前调用 add 函数,则需要在调用此函数前,对函数进行声明:

int add(int a,int b); //函数声明。

int main(){
    调用 add 函数 //在未定义函数前调用函数。
}

int add(int a,int b){
    return a + b;
} //定义函数

函数的调用

调用函数时,需暂停主调函数的执行,转入执行被调函数,当被调函数执行至 return 语句或函数末尾时,被调函数执行完毕,转回执行主调函数。可按如下格式调用函数:

函数名(实参列表)

注意:实参列表应与函数原型的参数个数及参数类型一致。
新建 addhs.cpp 文件,输入:

#include <iostream>
using namespace std;

int add(int a,int b); //函数声明。

int main()
{
    int x,y;
    cout<<"input x y:"; //输出提示信息。
    cin>>x>>y; //通过输入的方式给 x y 赋值。
    int c=add(x,y);//在未定义函数前调用函数。将函数的返回结果赋给变量 c。
    cout<<c<<endl;//输出 c 值。
    return 0;
}

int add(int a,int b)
{
    return a + b;
}//定义函数

执行语句 int c=add(a,b) 时,暂停执行 int main() 函数,转入执行 add 函数。把用户输入的 x、y 值传给 add 函数的变量 a、b,最后将语句 return a + b; 的结果赋给变量 c。
输入 x 值 和 y 值时,中间使用空格分隔,程序结果如下:

input x y :3 4
7

三、参数传递

在定义函数时,参数是没有实际值的,只起一个占位作用,所以称为形式参数,简称 “形参”;在调用函数时,参数必须有一个确定的值,是真正能对结果起作用的因素,所以称为实际参数,简称 “实参”。函数的 参数传递 指的是形参与实参结合的过程,其基本方式包括值传递引用传递两种。
注意:形式参数的本质和局部变量相似,在进入函数的时候创建,退出函数的时候销毁。

值传递

该方法把参数的实际值复制给函数的形式参数。在这种情况下,修改函数内的形式参数对实际参数没有影响。例如新建 swapxy.cpp,输入:

#include<iostream>
using namespace std;

void swap(int a,int b){ //定义空函数 swap,用于交换 a 和 b 的值。
    int t=a; //定义中间变量 t,并将 a 的值赋给变量 t。
    a=b; //将 b 的值赋给 a。
    b=t; //将 t 的值赋给 b,又因为 t=a,所以把 a 的值赋给 b。
}

int main(){
    int x=3;
    int y=4;
    cout<<"x="<<x<<","<<"y="<<y<<endl; //输出 x、y。
    swap(x,y); // 调用 swap 函数。
    cout<<"x="<<x<<","<<"y="<<y<<endl; //输出调用函数后 x、y 的值。
}

主函数中第一句 cout<<“x=”<<x<<","<<“y=”<<y<<endl; 用于正常输出局部变量 x 和 y 的值。执行语句 swap(x,y); 调用已经定义好的函数 swap,但函数调用时传递的是实参的值,即单向传递过程,此时改变形参的值对实参无任何影响。
程序结果:

x=3,y=4
x=3,y=4

引用传递

使用引用传递,需要在定义函数时,在参数前加上符号 &,该方法把参数的引用复制给形式参数,修改形式参数会影响实际参数。例如修改 swapxy.cpp 文件为以下内容:

#include<iostream>
using namespace std;

void swap(int &a,int &b){ //定义空函数 swap,用于交换 a 和 b 的值。
    int t=a; //定义中间变量 t,并将 a 的值赋给变量 t。
    a=b; //将 b 的值赋给 a。
    b=t; //将 t 的值赋给 b,又因为 t=a,所以把 a 的值赋给 b。
}

int main(){
    int x=3;
    int y=4;
    cout<<"x="<<x<<","<<"y="<<y<<endl; //输出 x、y。
    swap(x,y); // 调用 swap 函数。
    cout<<"x="<<x<<","<<"y="<<y<<endl; //输出调用函数后 x 和 y 的值。
}

函数 swap 的形参属于引用类型,所以修改形参将影响实参。
程序结果:

x=3,y=4
x=4,y=3

默认参数

在 C++ 中,函数可定义具有默认值的参数,即 默认参数。当调用函数时,如果用户指定了参数值,则使用用户指定的值;如果参数值缺省,则使用默认参数。例如新建 defaultcs.cpp,输入:

#include<iostream>
using namespace std;

int add(int a,int b = 5){//变量 b 的值默认为 5。
    return a + b;
}

int main()
{
    int a,b;
    cout<<"input a b:"<<endl;
    cin>>a>>b;
    cout<<"a + b(default) = "<<add(a)<<endl; //此时调用的 add 函数将 b 的值缺省,使之为默认参数。
    cout<<"a + b = "<<add(a,b)<<endl;
    return 0;
}

add(a) 的返回结果为:输入的 a 值与默认 b 值之和。
add(a,b) 的返回结果为:输入的 a 值与输入的 b 值之和。
程序结果:

input a b:
2   3
a + b(default) = 7
a + b = 5

函数重载

函数重载指定义一个参数类型或参数个数不同的重名函数。当程序执行时,编译器将调用参数类型与函数形参类型一致的函数。例如新建 renamehs.cpp,输入:

#include<iostream>
using namespace std;

int add(int a,int b){ //定义整型函数 add。
    int c;
    c = a - b;
    return c;
}

double add(double a,double b){ //定义双精度型函数 add。
    double c;
    c = a + b;
    return c;
}

int main()
{//函数重载。
    cout<<"a + b = "<<add(3,4)<<endl;//调用整型函数 add。
    cout<<"a + b = "<<add(3.111,4.222)<<endl;//调用双精度型函数 add。
}

执行 add(3,4) 时,调用 int add(int a,int b) 函数。
执行 add(3.111,4.222) 时,调用 double add(double a,double b) 函数。
程序结果:

a + b = -1
a + b = 7.333

挑战

请编写一个 C++ 程序:
自定义减法函数 subtra(int a,int b),并在主函数中调用此函数,返回 subtra(9,5) 的结果。
程序:

#include<iostream>
using namespace std;
int subtra(int a,int b){
    int c;
    c=a-b;
    return c;
}

int main(){
    cout<<"a - b ="<<subtra(9,5)<<endl;
}

结果

a - b = 4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值