求教关于virtual函数的一个有关问题

求教关于virtual函数的一个问题
#include <iostream>
using namespace std;

class A1{
public:
virtual void display(){cout<<"我是A"<<endl;}
};

class B:public A1
{
public:
B(){t = 2;};
void display(){cout<<"我是B"<<t<<endl;}
int t;
};
class C:public A1
{
public:
C(){t=3;};
void display(){cout<<"我是C"<<t<<endl;}
int t;
};

int _tmain(int argc, _TCHAR* argv[])
{
C *c = new C;
((B *)c)->display();

        return 0;
}

输出结果是 我是C

如果把A1中得display函数设置为非虚函数 输出结果是 我是B-33686067 

我是windows下32位系统
为什么去掉virtual 和没有去掉vitual会有这样的区别呢~不明白~忘高手指点下
------解决方案--------------------
应该怎么讲呢。。
虚函数是用来做这个的。用续函数表维护函数指针,强转之后函数指针的指向也不会发生改变,用来实现多态。
非虚函数那就跟类的普通成员差不多了。强转了自然会调用强转后的类函数。
------解决方案--------------------
楼上说的对

不过这个也看开发环境,我这里转成B类指针后就正常输出我是B,没有后面的那些

我用的windows7,32位的。VS2010.。。。
------解决方案--------------------
楼主去看看《c++深入对象模型》