问题描述
- 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
解决方案
那个pb[3]中的3从何而来?下标不是从0开始的吗?
还有virtual的引入和用法要多看看。
照你上面那种写法,pb[3]表示的是,第二个Derived实例的基类中的data,即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。这段代码里有太多巧合,画个图给你看下吧。
解决方案三:
pb执向的是Derived的首地址,,pb3是什么东西,请描述清楚点
解决方案四:
打印几个地址对比看看。多态只会用到虚函数。