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 私有的,只有在类内部访问。