要点:
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;iruler[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);
}
老大,视频咋样了