函数与重载的学习

来源:互联网 发布:互联网金融产品知乎 编辑:程序博客网 时间:2024/05/21 03:27

一些常见的预定义函数

cmath(C语言中的math.h)

  • sqrt() 平方根
  • pow() 乘方
  • abs() int类型取绝对值
  • labs() long类型取绝对值
  • fabs() double类型取绝对值
  • ceil() 向上取整
  • floor() 向下取整

 四舍五入程序举例

 int round(double number){    return static_cast<int>(floor(number+0.5));}

cstdlib(c语言中stdlib.h)

  • exit() 结束程序
  • rand() 随机数(可用srand()函数设定rand函数的seed)

随机数生成举例

int getRound(){    srand(static_cast<int>(time(NULL)));    return rand()%10;}

函数的两种声明方法

第一种,是常见的:

int add(int x,int y);

第二中:(仅限于声明函数时,定义是必须给出形参)

int add(int,int);

参数的值传递和引用传递

值传递

仅仅传递了实参的值。实际上是一个局部变量,调用函数时,首先计算出,实参的值然后该值成为传值惨数(实际上就是一个局部变量)的初始值。不能通过调用函数改变实参的值。

int add(int x,int y);

引用传递

引用本身就是变量的别名。函数调用时使用引用传递,是用实参变量(不是值)来代替形参。实参变量直接被带入函数,这样就可以通过改变参数变量改变实参的值。
定义函数式,在形参变量名前加“&”。

int add(int &x,int &y);

函数的重载

C++允许两个函数具有相同的函数名,这就叫做函数的重载。(但是这些函数的定义必须具有不同的参数数目,或者不同的参数类型

关于根据const和非const特性进行重载的情况,一些编译器支持,但是C++标准是不予许这种做法的。

举例:

int add(int x,int y);//两个int值相加是调用这个函数{return x+y;}int add(int x,int y,int z);//三个int值相加是调用这个函数{return x+y+z;}

有一点要注意,尽量不要让两个毫无关系的函数使用同一个函数名,这样容易造成混淆。


函数的测试与调试

assert宏

assertion(断言)是一个或者为true或者为false的语句。assertion同来检验程序的正确性。
原型定义:

#include <assert.h> void assert( int expression ); 

assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,
然后通过调用 abort 来终止程序运行。
举例:

#include <stdio.h> #include <assert.h> #include <stdlib.h> int main( void ) {        FILE *fp;        fp = fopen( "test.txt", "w" );//以可写的方式打开一个文件,如果不存在就创建一个同名文件        assert( fp );                           //所以这里不会出错        fclose( fp );        fp = fopen( "noexitfile.txt", "r" );//以只读的方式打开一个文件,如果不存在就打开文件失败        assert( fp );                           //所以这里出错        fclose( fp );                           //程序永远都执行不到这里来        return 0; } 

可以使用

#define NDEGUG

来禁用assert宏。

0 0
原创粉丝点击