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)

 

posted @ 2018-04-18 15:25  何许  阅读(377)  评论(0)    收藏  举报