发布网友 发布时间:2022-05-24 07:07
共1个回答
热心网友 时间:2023-10-08 02:31
函数重载就是一个简单的静态多态,静态多态是编译器在编译期间完成的,编译器会根据实参类型来选择调用合适的函数,如果有合适的函数可以调用就调,没有的话就会发出警告或者报错。
静态多态的原理是,
C++代码在编译时会对函数进行重命名,从这个角度讲函数重载本质上还是不同的函数,占不同的内存,入口地址一也不一样,当函数调用时,编译器会跟据传入的实参去逐个匹配,已选择对应的函数,如果匹配失败,编译器会报错(链接时),这叫重载决议。
虚函数动态多态的原理是
编译器处理虚函数的方法是:
给每个对象添加一个指针,存放了指向虚函数表的地址,虚函数表存储了为类对象进行声明的虚函数地址。比如基类对象包含一个指针,该指针指向基类所有虚函数的地址表,派生类对象将包含一个指向独立地址表的指针,如果派生类提供了虚函数的新定义,该虚函数表将保存新函数的地址,如果派生类没有重新定义虚函数,该虚函数表将保存函数原始版本的地址。如果派生类定义了新的虚函数,则该函数的地址将被添加到虚函数表中,注意虚函数无论多少个都只需要在对象中添加一个虚函数表的地址。