C++学习第5-7讲 函数及一些相关的知识点[讲义]

要点:
1、如何定义我们自己的函数?
2、函数重载与函数模板
3、一个特殊的函数:递归函数

一、如何定义我们自己的函数
一个完整的函数定义如下:
函数返回值类型  函数名(参数列表……){
  [函数体]
}

根据需要,有时还需要提前对函数先行声明一下,声明方式很简单,形同定义,不过是去掉函数体,并在结束处以“;”表示结束,如(在有些书上称:函数的原型):
函数返回值类型  函数名(参数列表……);

一个简单的示例代码如下:


#include
using namespace std;

int main()
{
  void Display();    //这时就是提前定义了
        //也可以定义在主函数外,但位置必须在main函数前

  Display();  //这里是调用了
  return 0;
}

void Display()
{
  cout<<"FileName is :"<<__FILE__<}

如果上面没有在main函数里提前定义,则会出现如同下面相似的提示:
error C3861: ‘Display’: identifier not found
与C有些不同的地方是,在C里,如果函数前没有指定返回类型,则默认为int型,而在C++里则不支持!

函数的参数的传递有三种:传值、引用与传址。
传值:对所传递的参数的本身值不影响
引用与传址:影响本身的值


#include
using namespace std;

int main()
{
  int Sum(int a,int &b,int *c);    //这时就是提前定义了

  int n1=10,n2=22,n3=30;
  int &q=n2;
  int *p=&n3;

  cout<<"n1:"<  int num=Sum(n1,q,p);
  cout<<"n1:"<  return 0;
}

int Sum(int a,int &b,int *c)
{
  b=a+(*c);
  (*c)=a+b;
  a=b+(*c);
  return a;
}

二、函数重载与函数模板
C++的模板函数初探
链接是/read.php/6.htm

所以这里就侧重讲一下函数重载了!
函数重载也叫“函数多态”,是C++新增的功能。
函数重载的关键是函数的参数列表--也称为函数特征标。(注:与参数的变量名是无关的)


#include
using namespace std;

char *left(char *source,unsigned int num);
unsigned long left(unsigned long source,unsigned int num);

int main()
{
  char trip[]="ChinaPeople!";
  unsigned long number=123456789;
  char *tmp;
  for(int i=1;i<10;i++){
    cout<    tmp=left(trip,i);
    cout<    delete [] tmp;
  }
  return 0;
}

unsigned long left(unsigned long source,unsigned int num)
{
  if(num==0 || source==0)
    return 0;
  unsigned long tmp=source;
  int digits=1;
  while(tmp/=10){
    digits++;
  }
  if(digits>num){
    num=digits-num;
    while(num--){
      source/=10;
    }
    return source;
  }
  else
    return source;
}

char *left(char *source,unsigned int num)
{
  char *p=new char[num+1];
  int i=0;
  for(;i    *(p+i)=source[i];
  while(i<=num){
    *(p+i)='\0';
    i++;
  }
  return p;    
}

三、递归函数是一种特殊函数:
递归函数,通俗来讲,就是自己调用自己。
下面是一个演示的例子:


#include
using namespace std;

const int Len=66;
const int Divs=6;
void subdivide(char ar[],int low,int high,int level);

int main()
{
  char ruler[Len];
  int i;
  for(i=0;i    ruler[i]=' ';
  ruler[Len-1]='\0';
  int max=Len-2;
  int min=0;

  ruler[min]=ruler[max]='|';
  cout<
  for(i=1;i<=Divs;i++){
    subdivide(ruler,min,max,i);
    cout<    for(int j=1;j      ruler[j]=' ';
  }
  return 0;
}

void subdivide(char ar[],int low,int high,int level)
{
  if(level==0)
    return;
  int mid=(high+low)/2;
  ar[mid]='|';
  subdivide(ar,low,mid,level-1);
  subdivide(ar,mid,high,level-1);
}

“C++学习第5-7讲 函数及一些相关的知识点[讲义]”的一个回复

发表评论