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

本文为博主原创。引用请注明出处。

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

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

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

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

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

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

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

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

注意:隐藏不是没有了,只是不给我们调用了。
阅读更多
个人分类: c/c++
上一篇C++标准异常
下一篇C++ 多态的实现原理--虚函数表
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭