Item 24. 成员函数的查找(Member Function Lookup )

Item 24. Member Function Lookup

当调用一个成员函数时,涉及到三个步骤:
1)编译器寻找函数名
2)从有效的候选函数中选出最匹配的
3)核对选出的函数与要访问的函数

从这个角度理解如下代码:
class B {
  public:
    //...
    void f( double );
};
class D : public B {
    void f( int );
};
//...
D d;
d.f( 12.3 ); // confusing

那终究调用的是 B::f( double ) 还是 D::f( int )呢?
分析一下那三个步骤:
1)寻找函数名。因为是调用D的对象,所以寻找的起始域是D,于是只找到D::f( int )
( 为什么找不到 B::f( double )呢?, 我也纳闷!)
2)从有效的候选函数中选出最匹配的。只有D::f( int ),那就是它喽
3)核对访问.因为D::f( int )是private,所以出错啦,

果真如此吗?
那就试一下就晓得了

posted on 2005-04-14 19:08  张大大123  阅读(113)  评论(0编辑  收藏  举报

导航