我正在阅读Stroustrup的C++ 0x FAQ,并被这段代码困住了。请看下面的代码继承时的范围规则 - C++
struct A
{
void f(double)
{
std::cout << "in double" << std::endl;
}
};
struct B : A
{
void f(int)
{
std::cout << "in int" << std::endl;
}
};
int main()
{
A a; a.f(10.10); // as expected, A.f will get called
B b; b.f(10.10); // This calls b.f and we lose the .10 here
return 0;
}
当一个类型是继承我的理解是,所有的protected和public成员将来自派生类访问。但根据这个例子,看起来我错了。我期待b.f将调用基类f。我通过改变像
struct B : A
{
using A::f;
void f(int)
{
std::cout << "in int" << std::endl;
}
};
问题
- 为什么它不是第一个代码工作的派生类中预期的结果?
- C++标准中的哪一部分描述了所有这些范围规则?
qood问题.. + 1 – Warrior 2009-06-17 08:43:18