class A{};
class B : A{};
void func(A* p)
{
B* p2 = p; // Error
}
答案 0 :(得分:4)
你的代码有几个奇怪的地方。
dynamic_cast
。通常情况如下:
class A {
public:
virtual ~A() {}
};
class Derived : public A {
};
void func(A* a) {
if(Derived* d = dynamic_cast<Derived*>(a)) {
// yeah, a is of type derived
} else {
// a is not of type Derived
}
}
答案 1 :(得分:1)
is-a
关系由public
继承实现。当你继承它时private
这是association
关系,不是 is-a
。因此B
不是A
。因此,您无法将A
存储在B
中,或A
无法成为B
和dynamic_cast
无效,因为源类型不是多态的
static_cast
也不会像那样工作'A'是'B'无法访问的基础
要建立is-a
关系,您需要执行class B: public A{}
答案 2 :(得分:-1)
对于类,默认情况下使用私有继承。