class A
{
public:
A() {};
~A() {};
virtual void
SetTest(){ printf("a/n");};
int m_iFirst;
};
class B :public
A
{
public:
B() {};
~B() {};
virtual void
SetTest(){ printf("b/n");};
int m_iSecond;
};
void
WanMeiTest(A* a, int iCount)
{
void * p = a + 1;
for(int i = 0;
i < iCount; i++)
{
(a+i)->SetTest();
}
}
在调用的时候如果转入的是
A a;
B b;
int c =
sizeof(a);
c = sizeof(b);
A aBase[2];
B* aChild =
new B[5];
B* pp = aChild + 1;
WanMeiTest(aChild,
5);
结果会崩溃,原因在于WanMeiTest里面的内存偏移是按照A的大小来的,除非里面强转成B类型的指针
数组作为参数时,传入基类首地址和子类首地址的区别
最新推荐文章于 2022-05-03 21:23:23 发布
本文探讨了C++中使用虚函数实现多态的案例,通过具体代码示例解释了当基类指针指向派生类对象时,如何正确地调用派生类的成员函数。同时,指出在特定情况下程序崩溃的原因,并给出了解决方案。
592

被折叠的 条评论
为什么被折叠?



