指向派生类对象的基指针的值

时间:2014-09-11 02:25:35

标签: c++

以下一段代码中的哪些陈述是正确的,为什么?

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;
}
  1. pApBpC的值相同;
  2. pC = pA + pB;
  3. pA与pB不同;
  4. pApB都不等于pC;
  5. 任何人都可以解释基类指针指向派生对象的现象吗?不只是存储派生类对象的起始地址?

1 个答案:

答案 0 :(得分:0)

pA指向ClassA类型的对象。 pB指向ClassB类型的对象。 pC指向ClassC类型的对象。他们的声明是这样说的。

ClassC类型的对象包含ClassA类型的对象和ClassB类型的对象。 ClassA和ClassB不重叠。因此,只有其中一个可能在ClassC的开头。如果说ClassA位于ClassC的开头,则pA和pC将在同一地址处起作用。另一个将从一开始就有一些偏差。从理论上讲,它可能不会在开始时发生。

因此,唯一始终为真的陈述是C:pA与pB不同。