关闭

C++中 隐藏、重写(覆盖)解析

243人阅读 评论(0) 收藏 举报
分类:
本文为博主原创。引用请注明出处。

由于重载比较清楚,很多人都明白,不再多说。

条件A:父类指针或引用指向子类对象。

隐藏:
子类中如果有一个函数(无论是否为虚函数,虚函数只在条件A中有用。所以如果没有条件A就无视virtual,把他当做平常函数一样)与父类同名,则继承下来的所有同名函数都被隐藏而不能使用。

重写:
其实就是父类中加了一个virtual关键字,子类中又重新按照函数声明的格式严格地写了一次(virtual即使没有加也要认为是加了)。至于怎么使用,必须结合条件A才能讲得通。如果不是那种情况,就可以当做是普通的一个成员函数,不要多想其它的了,该重载重载,该隐藏隐藏,该继承继承。

构造与析构函数:
这两个函数比较特殊,所以单独拿出来说:首先这两个函数都不会被继承。而且调用都一定会调用父类的构造与析构函数。而且析构函数没有参数不能重载。

其实单个概念说起来都比较简单。真正难的是全部混合在一起的时候。
不过理清了道理,以后再遇到继承的时候就可以有一个思考的过程了:

类型决定了所能访问的接口。
如果子类想改变父类的访问方式,可以通过隐藏的方式来实现。
但如果是条件A时,隐藏方式就不能奏效了。因为指针的类型是父类的。
如果在条件A下还能访问子类的同名方法,就只能在父类中声明为virtual虚函数了。

成员变量在重写的情况下,会隐藏父类的成员变量。

注意:隐藏不是没有了,只是不给我们调用了。
0
0
查看评论

c++三大概念要分清--重载,隐藏(重定义),覆盖(重写)

重载,隐藏(重定义),覆盖(重写)—这几个名词看着好像很像,不过其实一样都不一样!!综述:一、重载:(1) 概念:在同一个作用域内;函数名相同,参数列表不同(参数个数不同,或者参数类型不同,或者参数个数和参数类型都不同),返回值类型可相同也可不同;这种情况叫做c++的重载!注意:c语言没有函数重载...
  • gogogo_sky
  • gogogo_sky
  • 2017-06-05 20:22
  • 325

C++中 隐藏、重写(覆盖)解析

本文为博主原创。引用请注明出处。 由于重载比较清楚,很多人都明白,不再多说。 条件A:父类指针或引用指向子类对象。 隐藏: 子类中如果有一个函数(无论是否为虚函数,虚函数只在条件A中有用。所以如果没有条件A就无视virtual,把他当做平常函数一样)与父类同名,则继承下来的所有同...
  • wh_2396
  • wh_2396
  • 2016-08-29 21:02
  • 243

C++中重载、重写(覆盖)和隐藏的区别

如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数有virtual关键字。此时,基类的函数不会被“隐藏”。(在这里,你要理解为覆盖哦^_^) 隐藏”是指派生类的函数屏蔽了与其同名的基类函数,具体规则: 1、如果派生类的函数与基类的函数同名,但是参数不同。此时,若基类无virtual关...
  • zx3517288
  • zx3517288
  • 2015-10-08 18:33
  • 4575

C++中重载、重写(覆盖)和隐藏的区别实例分析

这篇文章主要介绍了C++中重载、重写(覆盖)和隐藏的区别,是C++面向对象程序设计非常重要的概念,需要的朋友可以参考下 函数重载: 在C++程序中,可以将语义、功能相似的几个函数用同一个名字表示,即函数重载。 重载的实现: 几个同名的重载函数仍然是不同的函数,它们...
  • ycl295644
  • ycl295644
  • 2015-05-06 18:34
  • 1217

重写、覆盖、重载、隐藏、多态几个概念的区别分析

转载自:http://blog.csdn.net/yukin_xue/article/details/7437742 override->重写(=覆盖)、overload->重载、polymorphism -> 多态   override...
  • liguohanhaha
  • liguohanhaha
  • 2016-04-13 21:46
  • 696

类成员函数中重载/重写(覆盖)/重定义(隐藏)的区别

转自http://blog.csdn.net/yanjun_1982/archive/2005/09/02/470405.aspx  这三个概念都是与OO中的多态有关系的。如果单是区别重载与覆盖这两个概念是比较容易的,但是隐藏这一概念却使问题变得有点复杂了,下面说说它们的区别吧。 ...
  • ranxiaoxu123
  • ranxiaoxu123
  • 2016-08-23 15:34
  • 703

C#和Java 方法重写和覆盖隐藏的区别

C#中方法有覆盖隐藏和override重写之分:        class BaseClass         {             public ...
  • TKWDmylove
  • TKWDmylove
  • 2016-01-05 09:53
  • 865

【C++11】final, override,重载,重写覆盖,重写隐藏

1:final, override的作用1:final的作用:修饰类或成员函数修饰类时: 表示本类禁止被继承; 修饰成员函数: virtual成员函数:表示不允许子类重写覆盖,但可以重写隐藏 非virtual成员函数:表示不允许子类重写隐藏; 2:override:用于标示虚函数,明...
  • u013777351
  • u013777351
  • 2015-09-09 14:53
  • 885

c++的重载、覆盖和遮蔽(隐藏)

C++的重载、覆盖和遮蔽(隐藏) 为了说明这三者的区别,引入函数签名的概念 函数签名主要包括1、函数名;2、参数的个数、数据类型和顺序 但是注意,函数签名不包括返回值 1、重载 在同一个类中,或者在顶层函数(与main函数同层)中,如果 (1)函数名相同 (2)函数签名不同 则就是函...
  • wanghuiqi2008
  • wanghuiqi2008
  • 2014-06-04 19:10
  • 2394

C++ 覆盖 重载 隐藏 浅析

本文首先阐释覆盖和重载的基本定义以及它与异常类型、异常数目还有返回值等相关概念间的关系;然后,介绍多态与虚函数等相关概念,并给出代码示例,以比较说明基类指向子类对象地址的指针与子类指向强制转换为子类的基类对象地址的指针在虚函数与一般成员函数(也是隐藏机制的函数)上,输出情况的异同;最后,阐明隐藏等相...
  • u013630349
  • u013630349
  • 2015-07-01 09:17
  • 1103
    个人资料
    • 访问:27015次
    • 积分:387
    • 等级:
    • 排名:千里之外
    • 原创:31篇
    • 转载:14篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论