0
class A{};

class B : A{};

void func(A* p)
{

      B* p2 = p; // Error

}
4

3 回答 3

4

您的代码有几个奇怪之处。

  1. 您使用私有继承。在私有继承中,当您不在类范围本身内时,您将无法转换为派生类。
  2. 即使您要公开继承,您也需要在基类中至少有一个虚函数(应该是析构函数)才能使用dynamic_cast.
  3. 当您需要大量向下转换时,您可能做错了什么。您可能应该重新考虑您对所提供 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 回答