在一次采访中有人问我这个问题,我不确定以下情况的行为:

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/

10-13 06:50