Java中的抽象函数与C++中的虚函数
来源:互联网 发布:和平网络电视安卓破解 编辑:程序博客网 时间:2024/06/15 13:46
1:java中没有虚函数的概念,但是有抽象函数的概念,用abstract关键字表示,java中抽象函数必须在抽象类中,而且抽象 函数不能有函数体,抽象类不能被实例化,只能由其子类实现抽象函数,如果某个抽象类的子类仍是抽象类,那么该子类不需要实现其父类的抽象函数。
虚函数 -------- 普通函数
纯虚函数 -------- 抽象函数
抽象类 -------- 抽象类
虚基类 -------- 接口
纯虚函数: 主要特征是不能被用来声明对象,是抽象类,是用来确保程序结构与应用域的结构据具有直接映射关系的设计工具。带有纯虚函数的类称为抽象类,抽象类能被子类 继承使用,在子类中必须给出纯虚函数的实现,如果子类未给出该纯虚函数的实现,那么该子类也是抽象类,只有在子类不存在纯虚函数时,子类才可以用来声明对 象!抽象类也能用于声明指针或引用,或用于函数声明中。具有抽象类特性的类还有构造函数和析构函数,全部是保护的类。如果没有给出纯虚函数的实现,则在它 所在的类的构造函数或析构函数中不能直接或间接的调用它。纯虚函数的实现可以在类声明外进行定义。
5. C++中一般都是把析构函数声明为虚函数。因为虚函数可以实现动态绑定,也就是到底调用哪个函数是根据指针当前指向哪个对象来确定的,不是根据指针的类型来确定。如果C++中不把析构函数声明为虚函数,那么其有个子类,重写了虚函数,那么当父类指针指向一个子类对象时,当调用析构函数时,只调用父类的析构函数,而无法调用子类的析构函数,所以一般情况是把析构函数声明为虚函数,实现动态绑定。当然如果一个类不包含虚函数,这经常预示不打算将它作为基类使用。当一个类不打算作为基类时,将析构函数声明为虚拟通常是个坏主意。
标准 string 类型不包含虚函数,如果把String作为基类继承得到子类会出问题。
总之:多态基类应该声明虚析构函数。如果一个类有任何虚函数,它就应该有一个虚析构函数;如果不是设计用于做基类或不是设计用于多态,这样的类就不应该声明虚析构函数。
补充:析构函数和虚函数的区别:
析构函数是特殊的类成员函数,它没有返回类型,没有参数,不能随意调用,也没有重载,只有在类对象的生命期结束的时候,由系统自动调用。 有适放内存空间的做用!
虚函数是C++多态的一种表现
例如:子类继承了父类的一个函数(方法),而我们把父类的指针指向子类,则必须把父类的该函数(方法)设为virturl(虚函数)。
使用虚函数,我们可以灵活的进行动态绑定,当然是以一定的开销为代价。 其次,要告诉楼主,在JAVA里面,是没有析构函数的概念,但是有finalize方法,实现的功能与析构函数类似,在类销毁前调用。在JAVA中,存在着一个垃圾回收的机制,该机制会自动清理内存中的垃圾,无需程序员担心垃圾回收的问题,但是可以通过system.gc()告诉JVM要尽快回收垃圾。
同样,JAVA中也是没有虚函数的概念,JAVA中有抽象方法,实现了虚函数类似的功能。
- Java中的抽象函数与C++中的虚函数
- Java中的抽象函数与C++中的虚函数
- Java中的抽象函数与C++中的虚函数
- Java中的抽象函数与C++中的虚函数
- Java中的抽象函数与C++中的虚函数
- Java中的抽象函数与C++中的虚函数
- Java中的抽象函数与C++中的虚函数
- Java中的抽象函数与C++中的虚函数
- C++、JAVA与C#中的多态虚函数、纯虚函数(抽象函数)
- C++、JAVA与C#中的多态虚函数、纯虚函数(抽象函数)
- C++、JAVA与C#中的多态虚函数、纯虚函数(抽象函数)
- Java中的“虚函数”,抽象类的抽象函数
- Java中的抽象类和抽象函数
- C++纯虚函数和Java中的抽象函数区别
- Java?C++?虚函数?抽象?
- C++中的纯虚函数与抽象类
- Java4Android笔记之Java中的抽象类和抽象函数
- C++与C#中的虚函数、纯虚函数、抽象类的对比
- JavaScript显示斐波纳契数
- MATLAB中FFT函数和点乘、乘、单位阶跃函数
- JavaScript大小写敏感性
- 常用正则表达式
- FTP 协议
- Java中的抽象函数与C++中的虚函数
- 《windows程序设计》(四)-------GDI编程之动态正弦曲线
- java异常处理
- MZFC
- 《windows程序设计》(四)-------GDI编程之动态贝塞尔曲线
- 最大子段和问题
- 关于lazyload的概念
- C# API 大全
- 大维团购导航API采集规则详细说明(单城市,多城市)