关于C++中重载、覆盖、多态的深层次探讨。
我学习C++也有些年头了,大概10年了吧,可是今天却发现对一些概念开始不理解了。在以前的认识中:
重载:父类中用 virtual 修饰,子类重新定义。
覆盖:父类中没有用 virtual 修饰,子类重新定义。
多态:同一个类中多个函数同名,但参数类型、数量不同。
可近日与别人探讨、自己网上查资料,却发现自己的概念完全弄错了?!
(我看过很多网上的资料,所以大家不用在这里解释那几个概念的“标准”定义了)
我只想说,为什么我学C++这么多年了,还会出现这样大的误解?为什么当初我会有那样的理解?
是因为那时候的教材翻译有误?还是我自己理解错了?还是当时(99年左右)大家流行中的概念与现在不同了?
也许我的理解是建立在字面意义上的:
重载:温柔的、技巧性的、稳妥的、有准备的 // 父类中修饰了 virtual,并准备好接受子类的重新定义
覆盖:暴力性的、不温柔的、遮挡住的、无准备 // 父类中被子类覆盖
多态:多种形态,至少视觉上是不一样的 // 同函数名不同的参数表
而当我试图从字面意义上理解,却发现与当前流行的“概念解释”不吻合。是我们的翻译者妥协了?还是我们大家都妥协了?
在当初学习C++的时候,还没有这么多的概念出现。我就像一个远古时代走过来的人,发现身边的一切、甚至概念都改变了。又或者,从一开始我就错了。。。
欢迎对 C++ 学习研究多年的同行们指点,也可以说说你们自己内心的理解和想法。
// 补充:虽然这只是概念上的问题,但请不要这样简单的回答,我希望能获得大家更多的答案和想法。