class A{};
class B : A{};
void func(A* p)
{
B* p2 = p; // Error
}
问问题
177 次
3 回答
4
您的代码有几个奇怪之处。
- 您使用私有继承。在私有继承中,当您不在类范围本身内时,您将无法转换为派生类。
- 即使您要公开继承,您也需要在基类中至少有一个虚函数(应该是析构函数)才能使用
dynamic_cast
. - 当您需要大量向下转换时,您可能做错了什么。您可能应该重新考虑您对所提供 API 的设计或使用。
通常情况下,事情看起来像这样:
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
}
}
于 2012-08-14T14:57:29.517 回答
1
于 2012-08-14T14:53:01.607 回答
-1
对于类,默认使用私有继承。
于 2012-08-14T14:46:16.723 回答