Pie*_*rre 3 c++ inheritance pointers dynamic-cast
当我使用指向继承类的指针调用基类函数时,为什么会出现编译错误?
例:
class cFoo {};
class cBar : public cFoo {};
void func1(cFoo *) {} // base class
void func2(cFoo **) {} // base class
void main(void)
{ cBar bar, *pbar; // inherited class
func1(&bar); // compiles OK
func2(&pbar); // fail
func2(dynamic_cast<cFoo**>(&pbar)); // 'class cFoo ** ' : invalid target type for dynamic_cast
}
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
考虑以下:
class cFoo {};
class cBar : public cFoo {};
void func1(cFoo *) {}
void func2(cFoo **p) { *p = new cFoo; } // modify pointee
void main(void)
{ cBar bar, *pbar; // inherited class
func1(&bar); // compiles OK
func2(&pbar);
}
Run Code Online (Sandbox Code Playgroud)
如果这样可行,你可以设法将一个cFoo对象放入一个没有编译器错误的cBar指针中,并且类型系统将被破坏.动态演员无济于事,因为演员阵容无法阻止伤害.