在一次采访中有人问我这个问题,我不确定以下情况的行为:
class A
{
virtual fun1(){...}
virtual fun2(){...}
};
class B : public A
{
virtual fun1(){...}
virtual fun2(){...}
};
现在如果
A* AObj = new A;
B* BObj = (B*) AObj;
BObj
是由于virtual关键字而访问B的方法,还是因为它指向AObj
的对象而不能访问B的方法?有人可以帮助我,确切说明向下转换还会如何影响访问吗?
最佳答案
将基类对象的地址分配给派生类指针是undefined behavior。因此,一切皆有可能:调用BObj
的函数可以调用B
的函数,可以调用A
的函数,可以使程序崩溃,甚至格式化硬盘。这都取决于编译器及其优化选项。
关于c++ - 向下转换和虚拟功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31782354/