当前位置: 代码迷 >> VC >> throw new CException;在vc6中没有关问题(vc++技术内幕中的一个例子里),但在vs2008里调试出错了!
  详细解决方案

throw new CException;在vc6中没有关问题(vc++技术内幕中的一个例子里),但在vs2008里调试出错了!

热度:6880   发布时间:2013-02-25 00:00:00.0
throw new CException;在vc6中没问题(vc++技术内幕中的一个例子里),但在vs2008里调试出错了!!


//throw new CException;//'CException' : cannot instantiate abstract class
try{

}catch(CException *e){//这样用时没问题

}


------解决方案--------------------------------------------------------
vs2008 没有CException 这个类。
但是可以这样:

public class CException : Exception
{
.........
}
------解决方案--------------------------------------------------------
哦,有,确实。

但是他是abstract类,是不能被new的。
------解决方案--------------------------------------------------------
那可以

public class MyCException : CException 
{
 
}

然后 :把CException 替换为 MyCException
------解决方案--------------------------------------------------------
[Quote=引用:]
哦,那么请教两个问题: 
1、为何vc6可以使用throw new CException,意味着vc6里CException不是虚类吗? 

-- c++ 有 abstract 么? 和c#的abstract是否一样,我得去查查。

2、为何vs2008中throw new CException不可以使用,但catch(CException *e)可以使用? 
--- 因为 CException 是个抽象类,c#语言规定了抽象类不能实例话。
 但catch(CException *e)可以使用? 
--- 这里的 e 是一个 CException 类型的变量,具体是什么哪一个对象,取决于 throw new 这个地方,如果
 throw new MyCException的话,这里的e就是MyCException类的一个对象引用。

另外: 
class MyCException : /*public//这里不使用public的话在后面也是不能throw new MyCException的,请问是什么道理?*/ CException 


}; 

---- 这个就是一个访问控制的问题
 public 是公有的,随便在哪都可以访问
 private 私有的,只有在类内部访问。




  相关解决方案