警惕将派生类数组指针传递给基类指针

703阅读 0评论2009-07-17 maxxfire
分类:C/C++

#include
using namespace std;
class Base
{
    //int hehe;
public:
    virtual void func() { cout << "base" << endl; }
};
class Ext : public Base
{
    //int haha;
    //int wuwu;
public:
    virtual void func() { cout << "ext" << endl; }
};

void test(Base *pb, int len)
{
    int i;
    for(i=0; i    {
        pb[i].func();
    }
}
int main()
{
    cout << sizeof(Base) << "," << sizeof(Ext) << endl;

    Base b[10];
    Ext  ex[10];
    test(b,10);
    test(ex,10);  //BUG
}
 
表面上可以运行,并且编译器安静的不提示一句话。。
但是当打开类中的数据定义部分的注释之后,程序崩溃~
 
理由:
打开类中的数据定义部分的注释之后,两个类的大小不一致,而pb[i]操作时是以基类的大小做递增操作;当传递派生类数组指针进去时,明显内存被粗暴的访问了。
上一篇:指向继承类的基类指针解引用后,是否还具备多态性
下一篇:电磁波对人体的危害