函数重载回顾函数重载的本质为互相独立的不同函数C++ 中通过函数名和参数列表确定函数调用无法直接通过函数名得到重载函数的入口地址函数重载必然发生在同一个作用域中类中的重载类中的成员函数可以进行重载构造函数的重载普通成员函数的重载静态成员函数的重载问题:全局函数,普通成员函数以及静态成员函数之间是否可以构成重载呢?万变不离其宗重载函数的本质为多个不同的函数函数名和参数列表是唯一的标识函数重载必然发生在同一个作用域中编程实验: 类与重载全面分析#include <stdio.h>class Test{private: int i;public: Test() { printf(“Test::Test()\n”); this->i = 0; } Test(int i) { printf(“Test::Test()\n”); this->i = i; } Test(const Test& obj) { printf(“Test::Test()\n”); this->i = 0; } static void func() { printf(“static void Test::func()\n”); } void func(int i) { printf(“void Test::func(int i), i = %d\n”, i); } int getI() { return i; }};void func(){ printf(“void func()\n”);}void func(int i){ printf(“void func(int i)\n”);}int main(){ func(); // 全局函数的重载 func(1); Test t; // 构造函数的重载 Test t1(1); Test t2(t1); func(); // 全局函数与静态成员函数不能发生重载 Test::func(); func(2); // 全局函数与成员函数不能发生重载 t1.func(2); // 普通成员函数与静态成员函数的重载 t1.func(); return 0;}输出:void func()void func(int i)Test::Test()Test::Test()Test::Test()void func()static void Test::func()void func(int i)void Test::func(int i), i = 2static void Test::func()普通成员函数与静态成员函数位于同一个类中,可以发生重载全局函数位于全局命名空间,不可以与成员函数发生重载深度的意义重载的意义通过函数名对函数功能进行提示通过参数列表对函数用法进行提示扩展系统中已经存在的函数功能编程实验: 重载的意义分析#include <stdio.h>#include <string.h>char* strcpy(char* buf, const char* str, unsigned int n){ return strncpy(buf, str, 8); // 不便于记忆}int main(){ const char* s = “D.T.Software”; char buf[8] = {0}; // strcpy(buf, s); // 安全性较低 strcpy(buf, s, sizeof(buf)-1); printf("%s\n", buf); return 0;}输出:D.T.Soft思考:重载能够扩展系统中已经存在的函数功能! 那么重载是否也能扩展其它更多的功能呢?下面的负数解决方案是否可行?class Complex{public: int a; int b;};==>int main(){ Complex c1 = {1, 2}; Complex c2 = {3, 4}; Complex c3 = c1 + c2; return 0;}小结类的成员函数之间可以进行重载重载必须发生在同一个作用域中全局函数和成员函数不能构成重载关系重载的意义在于扩展已经存在的功能以上内容参考狄泰软件学院系列课程,请大家保护原创!