c++ - 为什么 pA、pB、pC 不相等?

标签 c++ inheritance

考虑下面的程序

 #include<iostream>
 using namespace std;
 class ClassA
{
public:
    virtual ~ClassA(){};
    virtual void FunctionA(){};

};

class ClassB
{
 public:
    virtual void FunctionB(){};
};



class ClassC : public ClassA,public ClassB
{

};

void main()
{
    ClassC aObject;
    ClassA* pA = &aObject;
    ClassB* pB = &aObject;
    ClassC* pC = &aObject;

    cout<<"pA = "<<pA<<endl;
    cout<<"pB = "<<pB<<endl;
    cout<<"pC = "<<pC<<endl;

}

pA,pB,pC应该是相等的,结果却是

pA = 0031FD90

pB = 0031FD94

pC = 0031FD90

为什么 pB = pA + 4? 当我改变时

class ClassA
{
public:
    virtual ~ClassA(){};
    virtual void FunctionA(){};

};
class ClassB
{
 public:
    virtual void FunctionB(){};
};

class ClassA
{
};

class ClassB
{
};

结果是

pA = 0030FAA3

pB = 0030FAA4

pC = 0030FAA3

pB = pA + 1?

最佳答案

多重继承的对象有两个合并的子对象。我会猜测编译器将其中一个指针指向内部对象。

关于c++ - 为什么 pA、pB、pC 不相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19417340/

相关文章:

c++ - boost::polygon bool 减法会产生额外的行

c++ - 使用由结构指向的指针中的变量,该结构(该结构的)指针被发送到需要使用它的函数

c++ - 为什么我在这个简单的代码中有 HEAP CORRUPTION?

oop - SPARQL 主语及其所有父类(super class)的所有谓词-宾语对

python - Python 中的 'class A:' 和 'class A(object):' 有什么区别?

c++ - Web服务中的 "Backlog"是什么?

c++ - 如何使用 std::shuffle 随机排列具有唯一指针的 vector ?

ios - 委托(delegate)设置不正确

java - 没有基类访问的 hibernate 字段继承

java - JPanel 的扩展类不显示 JPanel 的属性