您的位置:首页 > 编程语言 > C语言/C++

C#、C++、JAVA中虚函数和抽象函数的概念对比

2016-12-27 15:12 309 查看


(2013-12-20 21:59:53)


转载▼

标签:

计算机

it

 
1、C++中函数被定义为虚函数的方法是在函数名前加virtual,虚函数可以有自己的具体内容,也可以不含有函数实现内容,称为纯虚函数。这里未指明为纯虚函数的函数均默认为非纯虚函数。纯虚函数的表示形式为virtual int getNum()=0;后面加"==0"表示函数无实现内容。含有虚函数的类可以实例化,可当作普通类来使用,但含有纯虚函数的类只能被继承后才能使用,且子类中必须实现父类的纯虚函数,这种情况下父类称为抽象类。

2、java中没有虚函数的概念,普通函数就相当于C++中的虚函数,不过可以在函数前加final使函数不能被重写。java中的含有抽象函数,相当于C++中的纯虚函数,java的抽象函数只能在抽象类中定义。java的抽象类不能被实例化,抽象类的子类必须实现全部抽象函数。可见java和C++中,虚函数的相关概念本质上是一致的。

3、C#整合了java和C++,对虚函数有了更明细的划分。定义了虚函数和抽象函数。虚函数定义时,在函数前加virtual,函数必须有实现,在子类中可以重写也可以不重写虚函数,重写虚函数时应在重写的函数前加override关键字。抽象函数不能含有函数实现,类似于接口,在继承的子类中必须重写该函数。另外,抽象函数只能定义在抽象类中,在普通类中定义抽象函数会报错。

可简单对比理解如下:

C++:  虚函数    纯虚函数
java: 普通函数  抽象函数
C#:   虚函数    抽象函数
    三种语言相对应的概念是基本一致的。java普通函数就可以被子类重写,而C++、C#中只有虚函数、纯虚函数或抽象函数可以被子类重写;C++的纯虚函数及Java、C#的抽象函数对应的类都是抽象类,且抽象类均不能实例化,只能被子类继承。

分享:

14


喜欢

阅读(1349)┊

评论 (0)┊
收藏(0)
转载(2)

喜欢
打印举报

已投稿到:

排行榜

转载列表:



转载

转载是分享博文的一种常用方式...

前一篇:结合windows消息系统理解C#中WndProc函数和DefWndProc函数
后一篇:[转载]转:c/c++ 数字转成字符串, 字符串转成数字
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: