ano*_*non 0 c++ virtual-functions multiple-inheritance forward-declaration
在followint代码中,指针转换和多继承如何一起发挥作用?
class Foo {
public:
virtual void someFunc();
};
class Bar;
void someWork(Bar *bar) {
((Foo*) bar)->someFunc();
}
class Bar: public Zed, public Foo {
...
virtual void someFunc() { ... do something else ... }
}
Bar bar;
int main() {
someWork(&bar);
}
Run Code Online (Sandbox Code Playgroud)
我的理解有点不稳定.
一方面,有些工作对Bar一无所知,所以这不应该工作; 但另一方面,我已经向前宣布了Bar.
谢谢!
这不起作用,它没有做你想象的那么多.你使用c风格的演员表:
(Foo*) bar
Run Code Online (Sandbox Code Playgroud)
在这种情况下是不正确的.你要做的是向上转换Bar*为a Foo*(即,static_cast从指向某个类的指针执行指向基类的指针).
Bar但是,由于此时定义不可用,因此编译器不知道它Foo是基类Bar.因此,static_cast失败和编译器回退并使用a reinterpret_cast,这根本不是同一个东西.