http://blog.sina.com.cn/s/blog_8b71d3a9010104rp.html
重载(overload)、覆盖(override)、隐藏(hide)的区别
这三个概念都是与OO中的多态有关系的。如果单是区别重载与覆盖这两个概念是比较容易的,但是隐藏这一概念却使问题变得有点复杂了,下面说说它们的区别吧。
重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同。调用的时候根据函数的参数来区别不同的函数。
覆盖(也叫重写)是指在派生类中重新对基类中的虚函数(注意是虚函数)重新实现。即函数名和参数都一样,只是函数的实现体不一样。
隐藏是指派生类中的函数把基类中相同名字的函数屏蔽掉了。隐藏与另外两个概念表面上看来很像,很难区分,其实他们的关键区别就是在多态的实现上。什么叫多态?简单地说就是一个接口,多种实现吧。
c++ 重载 覆盖 隐藏的区别和执行方式
成员函数被重载的特征
(1)相同的范围(在同一个类中);
(2)函数名字相同;
(3)参数不同;
(4)virtual 关键字可有可无。
覆盖是指派生类函数覆盖基类函数,特征是
(1)不同的范围(分别位于派生类与基类);
(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有virtual 关键字。
“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下
(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。
(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual 关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)
3种情况怎么执行:
1。重载:看参数
2。隐藏:用什么就调用什么
3。覆盖:调用派生类
分享到:
相关推荐
在C++编程语言中,Overload(重载)、Override(覆盖)和Hide(隐藏)是三个重要的概念,它们涉及到函数的多态性、继承和作用域。这些特性使得C++能够实现灵活的代码复用和面向对象的设计。 **1. Overload(重载)*...
函数覆盖(function override)是在派生类中完全一致性地声明了父类中的函数,区别在于函数定义中的大括号之间的内容可以不同,并且该函数在父类中有关键字virtual标识。函数覆盖的特征是:在不同的范围内(父类与...
### C++中的重载(Overload)、覆盖(Override)与隐藏(Hide) 在C++中,函数重载、覆盖和隐藏是理解类和继承的关键概念。它们涉及到如何在类和派生类中定义和使用函数,以及这些函数在运行时如何被调用。 #### 重载...
在 C++ 编程语言中,重写(Override)、重载(Overload)以及重定义(Redefine 或 Hide)是面向对象编程中非常重要的概念。这三个概念虽然在字面上相似,但它们在实际应用中的含义和作用却大相径庭。接下来,我们将...
C++中的多态实现机制主要包括覆盖(override)和重载(overload)。覆盖是指派生类中定义的新函数覆盖了基类中的同名函数。重载则是指在同一个类中定义多个同名函数但参数列表不同。隐藏(hide)是指派生类中的同名...
- 构造器不能被覆盖(`override`),但可以被隐藏(`hide`)。 #### 20. 接口与抽象类的关系 - 接口可以继承接口。 - 抽象类可以实现接口。 - 抽象类可以继承具体类。 - 抽象类中可以有静态的`main`方法。 #### 21. ...
- **隐藏**(Hide)使用`new`关键字在派生类中隐藏基类中的方法,允许派生类覆盖基类方法的行为,但不会改变基类方法的实现。 #### 题目十:在C#中如何声明一个类不能被继承 - 使用`sealed`关键字可以防止类被继承...
- **知识点说明**: 构造器不可以被重写(`override`),但是可以被隐藏(`hide`)。构造器用于初始化对象的状态。 - **示例**: `public MyClass() {}` **20. 接口与抽象类** - **知识点说明**: 接口可以被其他接口继承...
- **答案**:构造器不能被重写(`override`),但可以被隐藏(`hide`)。 ##### 20、接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)?抽象类中是否可以有静态的main...
构造器不能被覆盖(`override`),但可以被隐藏(`hide`)。 #### 20\. 接口与抽象类的继承 接口可以被其他接口继承,抽象类可以实现接口,也可以继承具体类或抽象类。抽象类中可以有静态的`main`方法。 #### 21\....