二、面向过程的编程风格(1)

本文介绍了C++中函数的使用,强调了函数独立化的优点,如提高代码可读性和重用性。讨论了函数的声明、定义、参数传递方式(传值和传址)以及内存管理,特别是局部变量和堆内存的生命周期。此外,还涉及了函数的默认参数值、内存泄漏问题以及头文件中的函数声明的重要性。
摘要由CSDN通过智能技术生成
  • 将函数独立出来的好处有:

1)以一连串函数调用操作取代重复编写相同的程序代码,使程序易读
2)可以在不同的程序中使用这些函数;
3)可以更容易地把工作分配给协作开发团队。

  • 每个函数必须定义返回类型函数名参数列表函数体四个部分。
  • 函数必须先被声明才能被调用(使用)。
  • 函数的声明让编译器得以检查后续出现的使用方式是否正确(参数是否足够、参数类型是否正确等)
  • 函数声明不必提供函数体,但必须指明返回类型、函数名和参数列表,即所谓的函数原型(function prototype)。
  • 函数的定义包括函数原型函数体
  • 成对的/**/是多行注释。
  • 当用户输入一个不合理的值时,可以终止整个程序(稍显极端)或抛出异常(见第七章)。
  • 标准库的exit()函数用来终止程序。必须传一个值作为程序结束时的状态值。
#include <cstdlib>
//...
//以状态-1结束程序
if(pos <= 0)
	exit(-1);
  • 函数只能返回一个值。题目“fibon_elem()是否计算出指定元素”关系到其返回值为truefalse,而返回该元素的实际值可通过加入第二个参数完成,如:
//修正函数原型
bool fibon_elem(int pos, int &elem);
  • 每个值类型都只能表示其值域(domain)中的最小至最大值间的某个值,超出即发生溢出(overflow)。

想知道某个类型的最小/最大值,可查询标准库中的numeric_limits class

#include <limits>
int max_int = numeric_limits<int>::max();
double min_dbl = numeric_limits<double>::min(); 
  • 函数的声明可以不写出参数的名称,参数名称只有在函数内使用参数时才是必要的。
  • 如果函数的返回类型不为void,必须在每个可能的退出点上将值返回。如果函数的最后一条语句不是return,那么最后一条语句之后便是该函数的隐式退出点,隐式退出点不返回任何数值则编译出错。
  • return;语句不返回任何数值,只在返回值为void时才被使用,可以提前结束函数的执行。
  • 两种参数传递方式:传址(by reference)和传值(by value)。
  • 当我们调用一个函数时,会在内存中建立起一块特殊区域,称为程序堆栈(program stack),提供了每个函数参数的储存空间,也提供了函数所定义的每个对象的内存空间(这些对象也叫局部对象local object)。一旦函数完成,这块内存就会被释放,也就是从程序堆栈中被pop出来。
  • 将对象传入函数,默认情形下它的值会被复制一份,成为参数的局部定义。这种方式称为传值
  • 让参数和传入的实际对象产生关联,即传址,最简单的方法便是将参数声明为一个引用(reference):
void swap(int &val1, int & val2)
{
   
	int temp = val1;
	val1 = val2;
	val2 = temp;
}
  • reference扮演着外界与对象之间一个间接手柄的角色。只要在类型名称和reference名称之间插入&符号,便是声明了一个reference。
int ival = 1024; //对象,类型为int
int *p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值