【发布时间】:2009-06-17 08:28:13
【问题描述】:
我正在阅读 Stroustrup 的 C++0x 常见问题解答并被此代码卡住了。考虑以下代码
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;
}
我的理解是当一个类型被继承时,所有受保护的和公共的成员都可以从派生类中访问。但是根据这个例子,看起来我错了。我期待 b.f 将调用基类 f。我通过更改派生类得到了预期的结果,如
struct B : A
{
using A::f;
void f(int)
{
std::cout << "in int" << std::endl;
}
};
问题
- 为什么它在第一个代码中不起作用?
- C++ 标准的哪个部分描述了所有这些范围规则?
【问题讨论】: