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