3DProgramming第二次课函数20210901


一、函数的声明与调用

类型标识符 函数名 (形式参数表)
{
语句序列
}

  • 函数的类型指的是函数的返回值。
  • 函数可以嵌套调用,但不可以嵌套定义。
  • 函数直接或间接调用自身。

二、函数间的参数传递

  • 只有函数被调用时形参才起作用。
    (在函数被调用时才分配形参的存储单元)

  • 实参类型必须与形参相符。
    (这里的“相符”不是指完全一样,可以顺利转化就可以。例如double转化为int,就是砍掉小数点。)

  • 传递时是传递参数值,即单向传递。
    (只有当用引用作为形参时候,形参的改变才会影响到实参的改变。)

  • 声明一个引用时,必须同时对它进行初始化,使它指向一个已存在的对象。一旦一个引用被初始化,就能改为指向其他对象。

int i,j;
int &ri=i;//建立一个int型的引用ri,并将其初始化为变量i的一个别名
j=10;
ri=j;//相当于i=j;
  • 引用可以作为函数的形参(因为函数只有在被调用时形参才起作用)。不会构成函数重载。
#include "stdafx.h"
#include <windows.h>
#include <iostream>

//#include "iostream.h" 从当前目录开始查找
//#include <iostream.h>
//搜索路径的区别

using namespace std;

int swap(int &, int &);//这边的声明函数原型也可以是int Add(int a, int b);或者int Add(int c, int d);或者int Add(int, int);因为这边的形参还不起作用。
                   //只有当函数被调用的时候形参才起作用。
                   //函数声明和函数实现不一致时候,会出现:无法解析的外部符号 "int __cdecl swap(int,int)" (?swap@@YAHHH@Z),该符号在函数 _main 中被引用
int Add(int w, int x = 8, int y = 10, int z = 6)     //有默认形参值的放在右边,没有默认形参值的放在左边.
{
	return 0;     
}

int main()
{
	int x = 5, y = 7;
	swap(x, y);
	Add(9);
	cout<<"X="<<x<<"Y="<<y<<endl;
    return 0;
}

int swap(int &a, int &b)
{
	int c = a ;
	a = b;
	b = c;
	return c;
}

三、内联函数

  • 声明时使用关键字inline
  • 编译时在调用处用函数体进行替换, 节省了参数传递、控制转移等开销。
  • 内联函数体内不能含有循环语句和switch语句。
  • 对内联函数不能进行异常接口声明。(Try、Catch)

四、带默认形参值的函数

函数在声明的时候可以预先给出默认的形参值,调用时如给出实参,则采用实参值,否则采用预先给出的默认形参值。

  • 有默认形参值的要放在右边,没有默认形参值的要放在左边。
int add(int x,int y=5,int z=6);//正确
int add(int x=1,int y=5,int z);//错误
int add(int x=1,int y,int z=6);//错误
  • 调用出现在函数体实现之前,默认形参值必须在函数原型中给出。 而当调用出现在函数体实现之后时,默认形参值需在函数实现时给出。
  • 在相同作用域内,默认形参值的说明应该保持唯一。 但如果在不同的作用域中,允许说明不同的默认形参。

例如:

int add(int x=1,int y=2);
int z=10;
void main(void)
{
int z=5;
int add(int x=3,int y=4);
add();//使用局部默认形参值(实现3+4)
}
void fun(void)
{...
add();//使用全局默认形参值(实现1+2)
}

五、函数重载

  • C++允许功能相近的函数在相同的作用域内以相同的函数名声明,从而形成重载。方便使用,便于记忆。
  • 函数重载的形式:形参类型不同或者形参个数不同。
  • 返回值是在函数执行之后才有的,但是在编译阶段还没有返回值,所以不以返回值来区分。(也就是说不以函数类型来判断函数是否重载)

六、C++系统函数

  • C++的系统库中提供了几百个函数可供程序员使用。
  • 使用系统函数时要包含相应的头文件。
  • 查找编译系统的库函数手册。

七、补充:函数指针与指针函数

  1. 函数指针(函数类型的指针)
    指向函数代码首地址的指针变量成为函数指针。
int*f)(int x);
double (*ptr)(double x);
  1. 指针函数(指针类型的函数)
    函数的返回值是指针类型数据。
(int*) f(x,y);
  • 函数指针赋值
int func(int x);//声明一个函数
int*f)(int x);//声明一个函数指针
f=func;//将func函数的首地址赋给指针f
  • 举例
//请定义一种函数指针类型
//返回值为整形指针,形参为两个整数
Typedef int (*pfun) (int,int);
*pfun pf;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值