自学C++(函数)

本文详细介绍了C++中的函数,包括其定义、调用方式、值传递机制以及常见的函数样式。通过实例解析了如何定义一个函数,如何在主函数中调用并传递参数,以及值传递过程中实参与形参的关系。此外,还讨论了函数声明的重要性以及如何进行函数的分文件编写,使代码结构更清晰。
摘要由CSDN通过智能技术生成

目录

一、概述

二、函数的定义

三、函数的调用

四、值传递

五、函数的常见样式

六、函数的声明

七、函数的分文件编写


一、概述

作用:将一段经常使用的代码单独编写,再进行调用,减少代码的重复。

比如一些比较大的程序,会分为若干个程序块,每一块都会实现不同的功能。

二、函数的定义

有5个部分:1、返回值类型 2、函数名(3、参数列表){4、函数体语句 5、return表达式}

注意:

1、如果函数不需要返回值,那么返回值类型我们可以定义为void,void表示无类型,并且可以不写return表达式。

2、函数名最好能直观体现此函数实现的功能,有利于代码的阅读

3、参数列表中的参数,为形式参数,在函数定义的时候,并没有真实的数据。

语法:

返回值类型 函数名(参数列表)

{

   函数体语句

   return 表达式;

}

例:定义一个函数,传入两个整形数据,实现两个整形数据相加,并返回相加结果。

代码:

int add(int num1, int num2)//int为返回值类型,add为函数名,int num1、int num2为参数列表
{
    int sum = num1 + num2;//sum为两数相加结果变量
                          //int sum = num1 + num2为函数体语句,实现两数相加,
                          //并把结果赋给sum
    return sum;//返回sum的值
}

三、函数的调用

函数的调用:使用已经定义好的函数

语法:函数名(参数);

注意:这里的参数是实际参数,有具体的数据。

例:在主函数中调用我们所定义的add函数,并打印结果

代码:

#include <iostream>
using namespace std;
int add(int num1, int num2)
{
    int sum = num1 + num2;
    return sum;
}

int main()
{
    int a = 5;//定义变量a,值为5
    int b = 3;//定义变量b,值为3
    int c = add(a,b);//定义变量c存放计算结果。调用add函数,并将返回值赋给c
                //()中的a,b为实际参数
                //在调用函数时,实参的值会传递给形参
                //a的值传递给num1,b的值传递给num2
                

    cout << "a = " << a << endl;//分别打印a、b、c的值
    cout << "b = " << b << endl;
    cout << "c = " << c << endl;
    system("pause");
    return 0;
}

运行结果:

四、值传递

值传递,就是函数调用时将实参的数值传递给形参。

注意:值传递时,如果形参发生了改变,并不会影响实参

例:实现两个数交换的函数。

代码:

#include <iostream>
using namespace std;

//实现两数交换函数
void swap(int num1, int num2)
{
    cout << "交换前:" << endl;//打印交换前num1和num2的值
    cout << "num1 = " << num1 << endl;
    cout << "num2 = " << num2 << endl;
    int temp = num1;
    num1 = num2;
    num2 = temp;
    cout << "交换后:" << endl;//打印交换后num1和num2的值
    cout << "num1 = " << num1 << endl;
    cout << "num2 = " << num2 << endl << endl;
    //由于我们两数交换,并不需要返回值,
    //所以函数返回值类型定义为void, return表达式也可以不写。
    //当函数不需要返回值时,如果写了return,程序会报错,说函数类型与返回值类型不匹配。
}

int main()
{
    int a = 66;
    int b = 99;
    swap(a,b);
    cout << "a = " << a << endl;//打印交换后a和b的值
    cout << "b = " << b << endl;
    system("pause");
    return 0;
}

运行结果:

从运行的结果可以看出,在我们交换前的形参num1=66,num2=99,交换后的形参num1=99,num2=66,证明我们的交换函数没问题。在调用完交换函数后,a=66,b=99依然没有发生变化,说明在调用函数时,形参发生改变并不影响实参

五、函数的常见样式

常见的有4种

1、无参无返

2、有参无返

3、无参有返

4、有参有返

1、无参无返

#include <iostream>
using namespace std;
//无参无返
void t1()
{
    cout << "今天是7月15日" << endl;
}

int main()
{
    //调用无参无返函数
    t1();
	system("pause");
	return 0;
}

运行结果:

2、有参无返

#include <iostream>
using namespace std;
//有参无返
void t2(int a)
{
    cout << "a = " << a << endl;
}

int main()
{
    //调用有参无返函数
    t2(10);//调用后,会将10赋给a
    system("pause");
    return 0;
}

运行结果:

3、无参有返

#include <iostream>
using namespace std;
//无参有返
int t3()
{
    cout << "无参有返的函数调用" << endl;
    return 6;
}

int main()
{
    //调用无参有返函数
    int a = t3();
    cout << "a = " << a << endl;
    system("pause");
    return 0;
}

运行结果:

4、有参有返

#include <iostream>
using namespace std;
//有参有返
int t3(int num)
{
    cout << "有参有返的函数调用" << endl;
    return num;
}

int main()
{
    //调用有参有返函数
    int a = t3(6);
    cout << "a = " << a << endl;
    system("pause");
    return 0;
}

运行结果:

六、函数的声明

作用:告诉编译器函数名称及如何调用函数,函数的主体可以单独定义。

有4个部分:1、返回值类型 2、函数名(3、参数列表) 4、;

语法:返回值类型 函数名(参数列表);

注意:1、当我们没有做函数的声明,并且定义的函数在主函数之后,那么我们的程序将会报错,                  因为编译器找不到定义的函数;但如果同样是没做函数声明,但调用的函数写在主程                      序之前,就没问题。所以我们需要提前对函数做声明,告诉编译器有这个函数,保证随                  时能调用。也就是说,如果没有函数声明,或者声明在主函数后,那么函数必须定义在                  主函数之前;如果有声明,且在主函数前面,那么函数定义在哪个位置都可以。

           2、函数的声明与函数的定义的区别在于:函数的声明只有返回值类型、函数名以及参数                      列表,还有分号;而函数的定义有函数体语句,具体实现什么,还有return返回值。

           3、函数可以声明多次,但是函数只能定义一次。虽然声明可以写多次,但是没有必要。

例:定义一个比较函数,实现两个整型数字的比较,并返回较大的值

代码:

#include <iostream>
using namespace std;
int compare(int a, int b);//比较函数声明
int main()
{
    int a = 5;
    int b = 9;
    cout << "较大值为:" << compare(a,b) << endl;//调用比较函数,并输出返回值
    system("pause");
    return 0;
}

int compare(int a, int b)//定义比较函数
{
    return a > b ? a : b;//返回较大值
}

运行结果:

七、函数的分文件编写

作用:让代码结构更加清晰

有4个步骤:

1、创建后缀名为.h的头文件(与创建.cpp文件相同的操作)

2、创建后缀名为.cpp的源文件

3、在头文件中写函数的声明

4、在源文件中写函数的定义

例:实现两个数字进行交换的函数

头文件代码:

//在头文件中做函数的声明
#include <iostream>
using namespace std;//在头文件中,这两句框架不能丢,否则会报错

//函数的声明
void swap(int a, int b);

源文件代码:

#include "swap.h"//""表示是自定义的头文件
                 //这条代码,将源文件与头文件关联起来

//函数的定义
void swap(int a, int b)
{
    int temp = a;
    a = b;
    b = temp;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
}

主函数代码:

#include <iostream>
using namespace std;
#include "swap.h"

int main()
{
    int a = 10;
    int b = 33;
    swap(a,b);
    system("pause");
    return 0;
}

运行结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值