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决定让派生类成员按名字隐藏掉基类成员。
  • 相关阅读:
    阿狸的打字机(bzoj 2434)
    Censoring(bzoj 3940)
    文本生成器(bzoj 1030)
    病毒(bzoj 2938)
    Road(bzoj 2750)
    codevs 2370 小机房的树
    HDU 2838 Cow Sorting
    luogu P2253 好一个一中腰鼓!
    hdu 1166 敌兵布阵
    luogu P1901 发射站
  • 原文地址:https://www.cnblogs.com/jamesmile/p/2124353.html
Copyright © 2011-2022 走看看