类中的函数重载(二十三)

  

,,,,,,,,今天我们来讲讲函数重载。函数重载的,在c++中通过函数名和函数参数确定函数调用. .类中的成员函数也是可以进行重载的:构造函数的重载,普通成员函数的重载以及静态成员函数的重载。那么全局函数,普通成员函数以及静态成员函数之间可以构成重载吗?重载函数的本质为。

,,,,,,,,下来我们以代码为例进行分许,来回答上面提出的问题

# include  & lt; stdio.h>      class 测试   {   ,,,int 我;   公众:   ,,,测试()   ,,,{   ,,,,,,,printf(“测试:测试()\ n");   ,,,,,,,   ,,,,,,,这个→小姐:=,0;   ,,,}   ,,,,   ,,,测试(int 我)   ,,,{   ,,,,,,,printf(“测试:测试(int 我)\ n");   ,,,,,,,   ,,,,,,,这个→小姐:=,我;   ,,,}   ,,,,   ,,,测试(const  Test&, obj)   ,,,{   ,,,,,,,printf(“测试:测试(const  Test&, obj) \ n");   ,,,,,,,   ,,,,,,,这个→小姐:=,obj.i;   ,,,}   ,,,,   ,,,static  void  func ()   ,,,{   ,,,,,,,printf (“void 测试::func () \ n");   ,,,}   ,,,,   ,,,void  func (int 我)   ,,,{   ,,,,,,,printf (“void 测试::func (int 我):,% d \ n",, i);   ,,,}   ,,,,   ,,,int  getI ()   ,,,{   ,,,,,,,return 我;   ,,,}   };      void  func ()   {   ,,,printf (“void  func () \ n");   }      void  func (int 我)   {   ,,,printf (“void  func (int 我):,% d \ n",, i);   }      int  main ()   {   ,,,Test  t,,,,,,,,,//测试:测试   ,,,Test  t1(1),,,,,//,测试:测试(int 我)   ,,,Test  t2 (t1);,,,//,测试(const  Test&, obj)   ,,,,   ,,,func (),,,,,,,,,//, void  func ()   ,,,测试:func ();,,//, void 测试::func ()   ,,,,   ,,,func (2),,,,,,,,//, void  func (int 我),小姐:=,2;   ,,,t1.func (2),,,,,//, void 测试::func (int 我),小姐:=2   ,,,t1.func (),,,,,,//, void 测试::func ()   ,,,,   ,,,return  0;   }

,,,,,,,,我们看到在类里面定义了三种构造函数,它们也构成了重载关系,还有两个函数函数。在全局函数中也定义了两个重载函数,它们和类中定义的函数也能构成重载吗?没在一个作用域,肯定是不行的。下来我们看看编译结果,看看分析的对不对

类中的函数重载(二十三)

,,,,,,,,我们看到分析的和编译的结果是一致的。那么重载的意义是什么呢?;下来我们通过一个示例代码进行说明

# include  & lt; stdio.h>   # include  & lt; string.h>,/*   char *,拷贝字符串(char *,但,,const  char *, str,, unsigned  int  n)   {   ,,,return  strncpy (buf, str,, n);   }   */int  main ()   {   ,,,const  char *, s =,“hello  world";   ,,,char  buf [8],=, {0};   ,,,,   ,,,拷贝字符串(buf), s);   ,,,//,拷贝字符串(buf,年代,,sizeof (buf) 1);   ,,,,   ,,,printf (“% s \ n",, buf);   ,,,,   ,,,return  0;   }

,,,,,,,,我们写了一个拷贝字符串重载函数,我们先将他注释掉。首先来调用系统中自带的拷贝字符串函数,看看编译结果

类中的函数重载(二十三)

,,,,,,,,我们看到它在运行的时候报段错误了。我们再来试试自己写的重载函数呢

类中的函数重载(二十三)

,,,,,,,,我们看到已经成功实现了,当然重载函数的内部是调用strncpy函数来实现的。但是我们只是复制,并不想考虑那么多,所以想直接用拷贝字符串函数来实现这个功能,这样就很直接了。由此可见,重载能够扩展系统中已经存在的函数功能! !那么重载是否也能够扩展其他更多的功能呢?比如直接用+号来实现复数的相加呢?我们后面接着继续讨论。通过对类中的重载函数的学习,总结如下:


,,,,,,,,

类中的函数重载(二十三)