【发布时间】:2014-10-24 16:45:14
【问题描述】:
谁能给我解释一下:
struct A {
virtual ~A() = default;
};
struct B : private A {
void foo() {
B* b = new B;
std::list<A*> list = {b};
B* back = dynamic_cast<B*>(list.back());
std::cout << back << std::endl;
}
};
int main() {
B b;
b.foo(); // nullptr
}
据我了解,只有 B 知道 B 是从 A 派生的。foo() 是 B 的成员函数。因此在 B::foo() 中从 A* 到 B* 的 dynamic_casting 应该没问题。那么为什么结果是 nullptr 呢?如果它是受保护的继承,也会发生同样的事情。将继承改为public,一切正常。这是怎么回事?
【问题讨论】:
标签: c++ inheritance private