一个类的构造函数,为其他类型转换..将调用哪个函数?

时间:2013-11-20 12:58:29

标签: c++ casting constructor

我有两个类,A和B,都有函数g()。

如果我这样做:

(A*) a = (A*) new B;

a->g();

函数g()将调用哪个类?

1 个答案:

答案 0 :(得分:3)

如果A声明该功能是虚拟的,并且B继承自A并覆盖它,则会调用B::g

如果它不是虚拟的,或者没有被覆盖,则会调用A::g

如果B未从A继承,则行为未定义且任何事情都可能发生。您可以通过使用隐式转换来避免此错误,只有在知道它是有效的情况下编译器才允许这种转换,而不是最危险的转换类型,这将允许大多数指针转换,无论它们是否有意义。