以下一段代码中的哪些陈述是正确的,为什么?
class ClassA
{
public:
virtual ~ ClassA(){};
virtual void FunctionA(){};
};
class ClassB
{
public:
virtual void FunctionB(){};
};
class ClassC : public ClassA,public ClassB
{
public:
};
int main(){
ClassC aObject;
ClassA* pA=&aObject;
ClassB* pB=&aObject;
ClassC* pC=&aObject;
return 0;
}
pA
,pB
和pC
的值相同; pC = pA + pB;
pA
与pB不同; pA
和pB
都不等于pC
; 任何人都可以解释基类指针指向派生对象的现象吗?不只是存储派生类对象的起始地址?
答案 0 :(得分:0)
pA指向ClassA类型的对象。 pB指向ClassB类型的对象。 pC指向ClassC类型的对象。他们的声明是这样说的。
ClassC类型的对象包含ClassA类型的对象和ClassB类型的对象。 ClassA和ClassB不重叠。因此,只有其中一个可能在ClassC的开头。如果说ClassA位于ClassC的开头,则pA和pC将在同一地址处起作用。另一个将从一开始就有一些偏差。从理论上讲,它可能不会在开始时发生。
因此,唯一始终为真的陈述是C:pA与pB不同。