一个类的构造函数,为另一个类进行强制转换.将调用什么函数

constructor of one class, casting for other.. what function will be called?

本文关键字:转换 函数 什么 调用 一个 构造函数 另一个      更新时间:2023-10-16

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

如果我这样做:

(A*) a = (A*) new B;
a->g();

将调用什么类的函数g()?

如果A声明函数为虚拟函数,而B继承自A并覆盖它,则会调用B::g

如果它不是虚拟的,或者没有被覆盖,那么A::g将被调用。

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