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

The value of the base pointers pointing to object of derived class

本文关键字:指针 对象 派生      更新时间:2023-10-16

以下代码中的哪条语句是正确的,为什么?

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. CCD_ 5不同于pB
  4. CCD_ 6和CCD_ 7都不等于CCD_

有人能解释基类指针指向派生对象的现象下的真实情况吗?不是简单地存储派生类的对象的起始地址吗?

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

ClassC类型的对象包含ClassA类型的对象和ClassB类型的对象。A类和B类不重叠。因此,它们中可能只有一个处于ClassC的开头。如果说ClassA在ClassC的开头,那么pA和pC将指向同一地址。另一个将与开始有一定的偏移。从理论上讲,两者都不可能在一开始就发生。

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