Afffffffff 2015-05-24 09:16 采纳率: 0%
浏览 1950

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

  • 写回答

3条回答 默认 最新

  • 小猫钓鱼045B 2015-05-25 05:23
    关注

    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。这段代码里有太多巧合,画个图给你看下吧。
    图片说明

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器