关闭

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

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

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

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

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

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

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

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

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

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

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:18964次
    • 积分:286
    • 等级:
    • 排名:千里之外
    • 原创:30篇
    • 转载:14篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论