class A{};
class B : A{};
void func(A* p)
{
B* p2 = p; // Error
}
質問する
177 次
3 に答える
4
あなたのコードにはいくつかの奇妙な点があります。
- プライベート継承を使用します。プライベート継承では、クラススコープ自体の内部にいない場合は、派生クラスに変換できません。
- パブリックに継承する場合でも、を使用するには、基本クラスに少なくとも1つの仮想関数(およびそれがデストラクタである必要があります)が必要です
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 に答える