开发者社区> 问答> 正文

c++继承指针的问题。父子类的赋值

#include 
using namespace System;
using namespace std;
class Base
{
public:
Base() :data(count)
{
cout << "Base-ctor" << endl;
++count;
}
~Base()
{
cout << "Base-dtor" << endl;
--count;
}
static int count;
int data;
};
int Base::count;
class Derived : public Base
{
public:
Derived() :data(count), data1(data)
{
cout << "Derived-ctor" << endl;
++count;
}
~Derived()
{
cout << "Derived-dtor" << endl;
--count;
}
static int count;
int data1;
int data;
};
int Derived::count = 10;
int main()
{
cout << sizeof(Base) << endl;
cout << sizeof(Derived) << endl;
Base* pb = new Derived[3];

cout << pb[3].data<< endl;
cout << ((static_cast<Derived*>(pb)) + 0)->data1 << endl;
delete[] pb;

cout << Base::count << endl;
cout << Derived::count << endl;
Console::Read();
return 0;
}

这里的pb到底指向哪里,pb3的值为什么是10

展开
收起
a123456678 2016-03-06 11:36:58 2247 0
1 条回答
写回答
取消 提交回答
  • VS2010 X86环境中Sizeof(Base)为4,Sizeof(Derived)为12。因为pb[3]即*(pb + 3)且pb为Base类型指针,所以偏移12字节。
    偏移后,pb实际上是指向第2个Derived了,因为你写的Base和Derived的大小刚好是3倍关系。所以pb[3].data输出的是第2个Derived的基类的data。这段代码里有太多巧合,画个图给你看下吧。
    screenshot

    2019-07-17 18:54:21
    赞同 展开评论 打赏
问答分类:
C++
问答地址:
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载