考考你,不许上机去试的啊! 当然有错,CBaseFormat又不是虚基类,怎么能这样用? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 基类是别人提供的!(DLL形式)怎么改!反正我的程序是死了! the base :1the Ex :2 the base :1the Ex :2 你到底想做什么,分开不是很好吗?void main(){ CBaseFormat* pBase = new CBaseFormat; CExFormat* pEx = new CExFormat; printf("the base :%d\n",pBase->m_nSth); printf("the Ex :%d\n", pEx->m_nSth); delete pBase; delete pEx;} CBassFormat(){ m_nSth=1; } ~CBassFormat(){}如果改成CBaseFormat的话,就是:12不会是考眼力的吧。 wrong free way, the CBaseFormat's destructor should be virtual delete pBase;调用基类析构函数,这样就跳过了CExFormat的析构函数,而new CExFormat调用了构造函数。基类的析构函数应该是虚函数。 对于不同的编译器可能会有问题,因为各个公司的编译器对c++标准的实现不尽相同我个人认为没有错。 对于 -> 操作符,其输出的内容由指针的的类型决定。 由于 new 的是 CExFormat 类,所以在进行指针类型显示转换时,不会出现 Object slicing,原因就是 CExFormat 是 CBaseFormat 的派生类。 如果 new 的是 CBaseFormat 就会出错, printf("the Ex :%d\n", ((CExFormat*)pBase)->m_nSth); 将不会输出正确的值。 是啊。多谢大家了!xiner(叉叉) 的风格很好!virtual ~CBassFormat(){}是少了,但是我不delete pBase;的话也是可以的:) 不要听那几个傻子胡说,怎么会跟基类是不是虚基有关系?只不知道,new 操作执行时,它的调用顺序?!!! 如果 new 派生类,那么它会先调用该派生类的基类的构造函数,然后再调用派生类的构造函数。 CBaseFormat* pBase = new CExFormat;这样使用是没问题的, 而且有时侯是必须的(为了实现多态么)不过基类的析构函数一定要是虚函树. 我想是这样 virtual ~CBassFormat(){}应该要,不然CExFormat没有删掉 http://www.csdn.net/expert/topic/461/461642.shtm解决这个问题先! 利用双缓冲,首先触发WM_ERASEBKGND,然后修改返回TRUE;是什么意思啊 让自己的程序员之路更长点。 见鬼了 进程,线程的灵异问题!! 转正了,发工资了,我散分咯,来高兴咯 小菜问问^-^ 请教一个全局变量的问题 这样的函数表示什么意思 受不了了,到处都是P2P的问题,发个好资料拯救下大家。 关于DLL的小问题,高手请进,一定有高分 c#问题 如何对一个socket限速??高分求教 请问 .ICL 的文件格式是什么样的?送分!!!
the Ex :2
the Ex :2
void main()
{
CBaseFormat* pBase = new CBaseFormat;
CExFormat* pEx = new CExFormat;
printf("the base :%d\n",pBase->m_nSth);
printf("the Ex :%d\n", pEx->m_nSth); delete pBase;
delete pEx;
}
~CBassFormat(){}
如果改成CBaseFormat的话,就是:
1
2
不会是考眼力的吧。
调用了构造函数。
基类的析构函数应该是虚函数。
我个人认为没有错。
对于 -> 操作符,其输出的内容由指针的的类型决定。
由于 new 的是 CExFormat 类,所以在进行指针类型显示转换时,
不会出现 Object slicing,原因就是 CExFormat 是 CBaseFormat 的派生类。 如果 new 的是 CBaseFormat 就会出错,
printf("the Ex :%d\n", ((CExFormat*)pBase)->m_nSth); 将不会输出正确的值。
virtual ~CBassFormat(){}是少了,但是我不delete pBase;的话也是可以的:)
只不知道,new 操作执行时,它的调用顺序?!!! 如果 new 派生类,那么它会先调用
该派生类的基类的构造函数,然后再调用派生类的构造函数。
这样使用是没问题的, 而且有时侯是必须的(为了实现多态么)
不过基类的析构函数一定要是虚函树.
解决这个问题先!