栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ 学习(六)函数 及 函数的分文件编写

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ 学习(六)函数 及 函数的分文件编写

函数

函数是将段经常使用的代码封装起来,减少重复代码量。

C++函数

语法:

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

{

        函数体语句

        return 表达式

}

下面示例包含了函数声明、函数定义、函数调用、函数形参与实参、参数值传递、函数常见样式(无参无返、无参有返、有参无返及有参有返)。

#include
using namespace std;

//定义函数(参数为形参):两个整数相加(函数定义在调用前面,否则报错,也可以先定义函数声明,函数写在调用函数后面,参见下面的函数声明max函数)
int add(int a, int b)
{
	int sum = a + b;
	return sum;
}

//定义函数(值传递):交换两个数值(参数值传递,形参发生改变不影响实参)
void swap(int a, int b)
{
	cout << "交换前形参:a = " << a << " , b = " << b << endl;
	int tmp = a;
	a = b;
	b = tmp;
	cout << "交换后形参:a = " << a << " , b = " << b << endl;

}

//函数声明:提前告诉编译器函数的存在,在定义前调用函数不会报错
//函数声明可以写多次(不建议写多次),但是定义只能写一次
int max(int a, int b);
int max(int a, int b);

//函数常见样式
//1、无参无返
void func1() {
	cout << "这是一个无参无返回值函数" << endl;
}

//2、有参无返:参见上面的swap函数

//3、无参有返
string func3()
{
	return "这是一个无参有返回值函数,这是返回的字符串";
}

//4、有参有返回,参见上面的add函数

int main()
{
	//调用函数 - 两数相加(参数为实参)
	cout << "调用函数:两数相加:add(5, 3) = " << add(5, 3) << endl;;

	cout << "--- 参数值传递,形参发生改变不影响实参 ---" << endl;

	//调用函数 - 交换两数(值传递)
	int x = 5;
	int y = 3;
	swap(5, 3);
	cout << "主函数调用交换函数(值传递)实参值, x = " << x << " , y = " << y << endl;

	//调用函数 - 无参无返
	func1();

	//调用函数 - 无参有返
	cout << func3() << endl;

	//调用声明函数
	cout << "调用函数声明函数max = " << max(3, 5) << endl;

	system("pause");

	return 0;
}

//函数定义(函数已在调用前声明)
int max(int a, int b)
{
	return a > b ? a : b;
}

输出结果

调用函数:两数相加:add(5, 3) = 8
--- 参数值传递,形参发生改变不影响实参 ---
交换前形参:a = 5 , b = 3
交换后形参:a = 3 , b = 5
主函数调用交换函数(值传递)实参值, x = 5 , y = 3
这是一个无参无返回值函数
这是一个无参有返回值函数,这是返回的字符串
调用函数声明函数max = 5

Go语言函数

Go语言函数与C++函数区别:

  1.  函数声明与定义一起,且不区别函数定义的位置
  2.  可以包含多个返回值
package main

import "fmt"

func main() {
	fmt.Println("调用函数:两数相加:add(5, 3) = ", add(5, 3))

	fmt.Println("--- 参数值传递,形参发生改变不影响实参 ---")
	x , y:= 5, 3

	swap(x, y)
	fmt.Printf("主函数调用交换函数(值传递)实参值, x = %d, y = %dn", x, y)

	fmt.Println("--- 实参通过接收函数返回值交换数据 ---")

	x, y = swap1(x, y)
	fmt.Printf("调用函数可以有多个返回值(返回值写法1 - 返回值没有定义名称) - 实现两数交换: x = %d, y = %dn", x, y)

	x, y = swap1(x, y)
	fmt.Printf("调用函数可以有多个返回值(返回值写法2 - 返回值定义名称) - 实现两数交换: x = %d, y = %dn", x, y)
}

//定义函数(参数为形参)
func add(a int, b int) int {
	return a + b
}

//定义函数(值传递):交换两个数值(参数值传递,形参发生改变不影响实参)
func swap(a int, b int) {
	fmt.Printf("交换前形参:a = %d, b = %dn", a, b)
	a, b = b, a
	fmt.Printf("交换后形参:a = %d, b = %dn", a, b)
}

//函数可以有多个返回值(返回值写法1 - 返回值没有定义名称):交换两个数
func swap1(a int, b int) (int, int) {
	return b, a
}

//函数可以有多个返回值(返回值写法2 - 返回值定义名称):交换两个数
func swap2(a int, b int) (x int, y int) {
	x, y = b, a
	return
}

输出结果

调用函数:两数相加:add(5, 3) =  8
--- 参数值传递,形参发生改变不影响实参 ---
交换前形参:a = 5, b = 3
交换后形参:a = 3, b = 5
主函数调用交换函数(值传递)实参值, x = 5, y = 3
--- 实参通过接收函数返回值交换数据 ---
调用函数可以有多个返回值(返回值写法1 - 返回值没有定义名称) - 实现两数交换: x = 3, y = 5
调用函数可以有多个返回值(返回值写法2 - 返回值定义名称) - 实现两数交换: x = 5, y = 3

函数分文件编写

可以把上面的交换函数swap放在一个公共文件中,供其他文件调用。

C++ 分文件编写 (1)创建.h头文件

在解决方案中,右键单击“头文件” -> 选择“添加” -> 选择“新建项”,如下图所示:

选择“头文件” -> 修改文件名称(.h结尾) -> 单击“添加”按钮,如下图所示:

 

(2)在.h头文件声明函数
#include 
using namespace std;

//两数交换函数声明
void swap(int a, int b);
(3)创建.cpp源文件

在源文件中创建swap.cpp文件,与创建头文件几乎相同,在学习(一)时已经演示过了,此处不再赘述。

(4)在.cpp源文件中定义函数

在swap.cpp文件中,引用头文件swap.h,即与其关联,代码如下所示:

#include "swap.h"

//定义函数(值传递):交换两个数值(参数值传递,形参发生改变不影响实参)
void swap(int a, int b)
{
	cout << "交换前形参:a = " << a << " , b = " << b << endl;
	int tmp = a;
	a = b;
	b = tmp;
	cout << "交换后形参:a = " << a << " , b = " << b << endl;
}
(5)测试主函数调用(另一个.cpp文件)

创建一个新的.cpp文件,引.h入头文件,在main函数中调用头文件中的swap函数,文件结构如下:

 调用函数文件代码如下:

#include
#include "swap.h"
using namespace std;

int main()
{
	//调用头文件中声明的函数
	cout << "调用头文件中声明的函数 swap(5, 3) "  << endl;;
	swap(5, 3);

	system("pause");

	return 0;
}

输出结果

调用头文件中声明的函数 swap(5, 3)
交换前形参:a = 5 , b = 3
交换后形参:a = 3 , b = 5

Go语言调用其它包中的函数 (1)创建公共函数

新建一个文件夹 “19-函数-公用函数”, 此处作为演示使用,实际项目中不建议使用中文名命名文件或文件夹。在该文件夹中创建一个.go文件(common.go),定义函数如下:

package common

import "fmt"

//定义函数(值传递):交换两个数值(参数值传递,形参发生改变不影响实参)
func Swap(a int, b int) {
	fmt.Printf("交换前形参:a = %d, b = %dn", a, b)
	a, b = b, a
	fmt.Printf("交换后形参:a = %d, b = %dn", a, b)
}

 注:在Go语言中,若想函数被其它包能够访问,函数名首字母需要大写(其含义为其它语言中的public)

(2)调用公共函数

创建主文件.go,调用公共函数(Swap),文件结构如下图所示:

源码如下:

package main

import (
	"fmt"
	common "testProject/CPlus/19-函数-公用函数"
)

func main() {
	fmt.Println("调用公共函数 swap(5, 3)")
	common.Swap(5, 3)
}

输出结果

调用公共函数 swap(5, 3)
交换前形参:a = 5, b = 3
交换后形参:a = 3, b = 5

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1018176.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号