`
jubincn
  • 浏览: 242747 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
文章分类
社区版块
存档分类
最新评论

C++中多态要注意的事情&与Java的对比

 
阅读更多

注:下面是我自己最近看书的总结,应该有错误


在C++中,如果子类与父类的函数名相同,那么子类将覆盖父类中同名的函数,也就是说,在继承关系中,方法签名只由方法名决定。若想实现多态效果,那么只能使用虚函数来实现。父类中的虚函数可能被编译为一个指针,编译子类时将子类相应的函数地址赋值给那个指针。


我想,继承在向上和向下两个方向起作用:

向上:子类可以使用父类中public和protected的方法和变量,实现代码重用。

向下:父类中的虚函数由不同的子类实现,实现多态。


在这个模型中,容易出问题的地方应该在“覆盖”上。子类对象赋值给父类变量后,执行的是父类中的函数,而不是自身的函数。这样一是容易使人陷入困惑,二是增大了对象的体积。所以我认为在设计时要尽量避免这种情况。如果是特意追求这种效果,一定要在注释中对此进行说明。

例如下面的代码:

在编译时就会报错:

BaseDerived.cpp: In function ‘int main()’:
BaseDerived.cpp:26:10: error: no matching function for call to ‘Derived::h(double)’
BaseDerived.cpp:26:10: note: candidate is:
BaseDerived.cpp:16:8: note: void Derived::h(float, float)
BaseDerived.cpp:16:8: note: candidate expects 2 arguments, 1 provided

说明父类中的g(int)和h(float)被“覆盖”了。

这与Java中是不一样的,Java中只是函数名相同不会覆盖,而是实现了“重载”,例如:

运行结果:

Base.f(double):3.14
Base.f(double):3.14

说明尽管子类中定义了同名的f(int)和g(double, double),但父类中的f(double)和g(double)仍能使用。

分享到:
评论

相关推荐

    C++和Java多态的区别

    本文将对比分析C++和Java中多态特性的实现机制及其差异。 #### 二、C++中的多态实现 在C++中,多态主要通过虚函数来实现。当一个类声明了一个虚函数后,它的派生类可以重写该虚函数。通过基类指针调用派生类对象的...

    面向对象编程C++和Java比较教程

    C++与Java在面向对象特性上的比较: 1. 封装:两者都支持封装,即隐藏对象的内部实现细节,通过公有接口暴露必要的功能。C++通过访问修饰符(public, private, protected)来控制成员的可见性,而Java则有类似的机制...

    Java语言与C++语言的对比分析.pdf

    在计算机编程语言的发展历程中,Java和C++作为两个重要的语言,它们各自有着鲜明的特征和应用领域。Java语言由Sun Microsystems公司于1995年推出,而C++则源于1983年推出的C语言,由Bjarne Stroustrup开发。两种语言...

    面向对象编程C++和Java比较教程 中英文完整版 pdf

    本教程对比了两种广泛应用的面向对象语言——C++和Java,帮助读者深入理解两者之间的异同。 C++是Bjarne Stroustrup于1983年创建的,它是C语言的扩展,增加了类、模板、异常处理等面向对象特性。C++强调性能和灵活...

    C++与java的综述与比较

    ### C++与Java的综述与比较 #### 引言 C++与Java都是面向对象的编程语言,Java从某种程度上来说是基于C++发展起来的,因此它们之间存在着诸多相似性和差异性。本文旨在对这两种语言进行一个全面的综述,并通过对比...

    C++与Java语言对比

    本篇文章将深入探讨C++与Java在数据类型、概念性以及面向对象编程(OOP)三大精神——封装、继承、多态方面的对比。 首先,我们来看看数据类型。C++是一种静态类型语言,它提供了丰富的原始数据类型,如int、char、...

    java/c++区别

    此文档旨在全面对比Java和C++,整合了网络上的众多资源,旨在帮助读者理解和解决实际编程中遇到的问题。尽管它可能不如专门的书籍详细,但仍提供了丰富的对比信息。 (二) 个人学习感受 作者从自身经验出发,指出...

    java与C++严格的比较.pdf

    ### Java与C++的严格比较 #### 一、引言 随着软件工程领域的快速发展,越来越多的开发者被要求掌握多种编程语言。《Java与C++严格的比较》这篇文章由Robert C. Martin撰写于1997年,是针对Java与C++这两种流行编程...

    使用C、C++、Java实现面向对象demo

    在学习过程中,可以对比分析C++的虚函数和Java的接口,理解它们如何实现多态;也可以研究C++的模板和Java的泛型,探讨静态多态和动态多态的区别。总之,面向对象编程是现代软件开发中的重要工具,熟练掌握C、C++、...

    对Java的思考(Thinking in Java) Java入门 java与C++对比 深入浅出

    本书通过对比Java和C++,使读者能够更好地理解Java的独特之处,并为初学者提供了一个逐步学习Java的框架。 第1章"对象入门"探讨了面向对象编程的基本原理,包括抽象、接口、隐藏实现、继承、多态以及异常处理。作者...

    Java语言与C++语言的对比分析.zip

    Java语言和C++语言是两种广泛使用的编程语言,它们各自有着独特的优势和适用场景。这篇对比分析将深入探讨这两者在语法、性能、内存管理、跨平台性、面向对象特性、编程模型以及应用领域等方面的差异。 1. **语法...

    OOP语言技术比较:Java,C++,Object Pascal[1]

    C++中的OOP特性与Java相似,包括封装、继承和多态。不过,C++提供了更底层的内存管理机制,如指针,这使得程序员有更大的自由度,同时也带来了更高的责任,需要程序员自己处理内存分配和释放,避免内存泄漏等问题。 ...

    java于c++的区别

    - **多态**:Java中的多态主要通过方法重载(overloading)和方法覆盖(overriding)实现,而C++中的多态除了这两种方式之外,还可以通过虚函数(virtual function)来实现动态绑定。 #### 2. 编译与执行 - **编译方式**...

    Java与C++的比较

    ### Java与C++的比较 #### 一、引言 Java和C++是两种非常流行的计算机编程语言。Java由Sun Microsystems公司于1995年推出,作为一种面向对象的编程语言,它继承和发展了许多C++的特点,同时也做出了一些重要的改进...

    常见C++/java面试题

    在IT行业的面试中,C++和Java作为两种广泛使用的编程语言,经常出现在笔试和面试的题目中。这两种语言各有特点,适用于不同的应用场景。本篇文章将深入探讨C++和Java的面试知识点,帮助求职者做好充分准备。 对于...

    JAVA与C++比较.pdf

    【标题】: "JAVA与C++比较.pdf" 【描述】: 该文档对比了C++和Java这两种编程语言,探讨了它们各自的发展历史、设计理念和主要特点。 【标签】: "C语言" 【部分内容】: C++和Java都是目前广泛应用的编程语言,...

    象棋C++和java源代码

    在这个“象棋C++和Java源代码”压缩包中,包含了三个不同的源代码实现,分别用C++和Java编写,这为学习者提供了一个对比和理解这两种语言在处理复杂逻辑上的差异和相似性的宝贵机会。 首先,让我们深入了解一下C++...

    java工程师笔试题.pdf

    - C++的封装(class)、继承(extends)、多态(virtual keyword)与Java的对比。 9. Java和C++标准库的使用 - C++中标准库的使用,如iostream库,以及如何通过#include引入库。 10. C++的内存分配 - new和...

Global site tag (gtag.js) - Google Analytics