zoukankan      html  css  js  c++  java
  • [C++]函数查找规则

    我们定义了一个类,里面有很多方法,我们调用的其中某个方法,如何确定调用了哪些方法呢?

    首先,我们知道函数查找的顺序如下:

    1)查找函数的名字

    2)从中找出最佳匹配。

    3)检查是否具有该函数的访问权限

    4)实参相依原则:根据实参的类型,自动进入相应的命名空间、类内部进行查找。

    增加一条: 派生类成员按名字隐藏掉基类成员 class Base { public: virtual void f(int x); }; class Derived: public Base { public: virtual void f(double *pd); }; Derived *pd = new Derived; pd->f(10); // 错误! 问题在于Derived::f隐藏了Base::f,即使它们取的是不同的参数类型;所以编译器要求对f的调用取一个double*,而10这个数字当然不行。 这不很合理,但ARM对这种行为提供了解释。假设调用f时,你真的是想调用Derived中的版本,但不小心用错了参数类型。进一步假设Derived是在继承层次结构的下层,你不知道Derived间接继承了某个基类BaseClass,而且BaseClass中声明了一个带int参数的虚函数f。这种情况下,你就会无意中调用了BaseClass::f,一个你甚至不知道它存在的函数!在使用大型类层次结构的情况下,这种错误会时常发生;所以,为了防患于未然,Stroustrup决定让派生类成员按名字隐藏掉基类成员。
  • 相关阅读:
    算法笔记--贪心
    算法笔记--递归
    算法笔记--哈希
    算法笔记--散列
    算法笔记--排序算法
    算法笔记--简单编程训练
    算法笔记--简单模拟
    算法笔记--注意事项
    3.4 空间滤波
    【解题报告】【概率DP入门】 P1850 换教室
  • 原文地址:https://www.cnblogs.com/jamesmile/p/2124353.html
Copyright © 2011-2022 走看看