`
duyouhua1214
  • 浏览: 238147 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

C++中重写(override)与重载(overload)的区别

 
阅读更多
override是指在不同作用域中,多个函数原型完全一样,而实现却不同的函数。在C++中,经常发生在类的继承中。当基类中的某个方法是virtual或pure virtual函数时(当然访问权限必须是public或protected,因为从C++设计思想上来讲private的函数不会是virtual的,呵呵),其子类中对该方法的重新实现就属于override。使用时,可以通过基类的指针或者引用所指向的具体对象来确定调用的是哪个方法,从而实现函数的多态。对于基类中的非virtual类型的成员函数,若其子类中也声明了与该函数名称相同的函数,那么基类中的该函数(也许是一系列函数,如果该函数在基类中有重载的话,呵呵)将被隐藏,可以通过域解析操作符来调用。不过按照C++的设计思想来说呢,基类中的非virtual类型的成员函数,是不需要在子类中进行修改的,所以如果在子类中出现了这种隐藏的情况,说明应该将基类中的该函数改成virtual类型的,然后就是override了,哈哈!
而overload则是指在相同作用域中,多个函数具有相同的名字,但参数的数目和类型各不相同(当然相同数目和类型,如果顺序不同也是可以的,哈哈),因为函数重载的机制是在C++中函数的签名与其参数有关,而不像C中,只与函数名有关。

总之,override与overload的一个最大的区别就是作用域不同,以及函数原型是否相同,呵呵。

补充函数的重载(overload)覆盖(override)隐藏

派生类的函数与基类的函数完全相同(函数名和参数列表都相同),只是基类的函数没有VIRRUAL关键字.些时基类的函数将被隐藏,而不是覆盖.

派生类的函数与基类的函数同名,但参数列表不同,在这种情况下,不管基类的函数声明是否有VIRRUAL关键字,基类的函数都将被隐藏.注意这种情况与重载的区别,重载发生在同一个类中。

 

来源:http://hi.baidu.com/jink20080509/blog/item/74fcc100e50255054bfb51a2.html

 

分享到:
评论

相关推荐

    重写与重载的区别共2页.pdf.zip

    在编程领域,重写(Override)与重载(Overload)是两个非常重要的概念,尤其在面向对象编程中。它们都是实现多态性的方式,但各自有着不同的含义和使用场景。接下来,我们将深入探讨这两者的区别。 首先,重载...

    C++ 重写重载重定义区别

    ### C++ 中重写、重载与重定义的区别 在 C++ 编程语言中,重写(Override)、重载(Overload)以及重定义(Redefine 或 Hide)是面向对象编程中非常重要的概念。这三个概念虽然在字面上相似,但它们在实际应用中的...

    C++中overload,override,overwrite的区别详细解析

    Overload(重载):在C++程序中,可以将语义、功能相似的几个函数用同一个名字表示,但参数或返回值不同(包括类型、顺序不同),即函数重载。(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;...

    C++中Overload,Override,Hide之间的区别

    在C++编程语言中,Overload(重载)、Override(覆盖)和Hide(隐藏)是三个重要的概念,它们涉及到函数的多态性、继承和作用域。这些特性使得C++能够实现灵活的代码复用和面向对象的设计。 **1. Overload(重载)*...

    overload and override.txt的区别

    在面向对象编程中,`overload`(重载)与`override`(重写或覆盖)是两个重要的概念。它们虽然只有一字之差,但在实际应用中却有着本质的区别。 #### Overload(重载) 重载指的是在一个类中定义多个同名但参数...

    浅谈C++重载、重写、重定义

    在C++编程语言中,重载、重写和重定义是三个重要的概念,它们涉及到函数的多态性和作用域。下面将详细讲解这三个概念,并通过示例代码进行说明。 1. 重载(Overload) 重载是指在同一个作用域内,可以定义多个同名...

    C++中的类 个人总结

    在C++中,结构体可以通过`struct`关键字声明,与类的主要区别在于默认访问权限不同:结构体成员默认是公有的(public),而类成员默认是私有的(private)。 2. 类与对象:类是定义数据和操作数据的方法的蓝图,而...

    C++与操作系统等面试题8

    ### C++中的重载(Overload)、重写(Override)与重定义(Hiding) #### 一、重载(Overload) **定义:** 在C++中,重载(Overload)指的是在一个作用域内定义多个同名函数,但这些函数的参数列表必须有所不同(包括参数...

    PHP和JAVA中的重载(overload)和覆盖(override) 介绍

    重载(overload)与覆盖(override)是面向对象编程中的两个重要概念,它们在不同的编程语言中表现出来的特性略有不同,尤其在PHP和JAVA这两种广泛使用的语言中表现得尤为明显。 首先,重载(overload)是指在同一个类中...

    C++中的重载、覆盖、隐藏介绍

    前几天面试时被问及C++中的覆盖、隐藏,概念基本答不上来,只答了怎么用指针实现多态,也还有遗漏。最终不欢而散。回来后在网上查找学习了一番,做了这个总结。其中部分文字借用了别人的博客,望不要见怪。 •概念 ...

    C++常用术语

    在C++中,可以重载赋值运算符,以便在自定义类型中实现特定的赋值行为。 #### 9. 基类(Base Class) 基类是在继承关系中被其他类继承的类。C++支持单继承和多继承,基类的成员可以被派生类访问和使用,从而实现...

    王牌7 Visual C++常见面试题

    一、重载(overload)和重写(override)的区别 在C++中,重载和重写是两个重要的概念,它们用于函数多态性的实现。 重载是指在同一个作用域中可以声明几个功能类似但参数列表不同的函数,这些函数被调用时,编译器会...

    C++100道核心面试题

    多态可以通过重写(Override)和重载(Overload)两种方式来实现。 ### 多态性的实现 #### 重写(Override) 在继承关系中,子类可以重新定义与基类中同名的方法,这被称为方法的重写。重写要求子类方法与基类方法...

    C++的虚函数和JAVA的抽象函数

    与C++不同,Java中所有的方法都是隐式虚的,即默认具有多态性。这意味着在Java中,无需像C++那样显式声明虚函数。Java中的抽象类和抽象方法是通过在方法声明前添加`abstract`关键字来定义的。抽象方法没有函数体,...

    c++笔试常见问题

    #### 十五、重载与重写的区别 1. **重载(Overload)**:在同一作用域内,允许定义多个同名但参数列表不同的函数,这些函数被称为重载函数。 2. **重写(Override)**:在派生类中重新定义基类中的虚函数,称为重写...

    C++练习题(关于类的应用)

    继承的优势在于派生类可以复用基类的代码,而重写(override)或重载(overload)基类的方法来实现特化功能。 多态则是指不同的对象可以响应相同的消息(调用相同的函数名)。在C++中,多态是通过虚函数(virtual ...

Global site tag (gtag.js) - Google Analytics