首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

cannot instantiate abstract class

2014-01-28 
//throw new CException//CException : cannot instantiate abstract class try{ }catch(CException *e)



//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
------解决方法--------------------------------------------------------
那么请教两个问题:
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 私有的,只有在类内部访问。

        

热点排行