C++多态——静态多态
c++多态主要分为动态多态和静态多态两种。动态多态主要以晚绑定,动态绑定实现,使用virtual关键字,含有虚函数类都有一个一维虚函数表——虚表,类的对象有一个指向虚表开始的虚指针。
动态绑定参考:https://www.cnblogs.com/cxq0017/p/6074247.html
静态绑定就是指函数重载:需要函数名一样,形参列表类型或者数量不一样,顶层的const不能作为区分的方法,
比如:
void test( int ) 和 void test( const int ) 以及 void test( int *) 和 void test( int* const )
就是属于顶层const,所谓顶层const就是当前变量是const的,比如指针本身是const,或者int变量本身是const的
使用底层const就可以实现形参的区分,比如:
void test( int & ) 和 void test( const int &) 以及 void test( int *) 和 void test( const int* )
当调用重载函数时,需要进行函数匹配,匹配成功需满足两个条件:
1.该函数每个实参都不劣于其他可行函数需要的匹配。
2.至少有一个实参优于其他可行函数提供的匹配。
匹配失败编译器会报出二义性错误。
有了标准就有会对应的匹配规则,匹配分为几个等级。
1.类型完全相同,或者是实参从 数组 或 函数类型 转换为指针类型 , 向实参加入或者删除 顶层的const
2.底层const转换
3.类型提升
4.算术类型转换 (bool --> int) 或者 指针转换 (int* ---> const void * 、 while(p))
5.类类型转换 int(A)

浙公网安备 33010602011771号