内容: 今天记录的是不要重新去定义父类的非虚成员函数,因为这样可能会出现逻辑上的不合理行为,就像是一种行为分裂的现象。下面由代码讲述:

代码:
【博客30】请勿重新定义继承而来的 " 非虚成员函数"
结果:
【博客30】请勿重新定义继承而来的 " 非虚成员函数"
分析:代码虽然是一段很简单的代码,但是可以给我们警醒的作用,当你重新定义了继承而来的非虚拟成员函数时,这时候它的行为可能就不是跟对象是属于哪种类型有关,就变成了它的行为跟你所使用的指针是什么类型有关,这种不一致行为显然不是我们需要的。所以我们需要的是要么就重新定义虚函数,不然也不要去定义继承来的函数。否则就会出现代码中的,明明对象是一个子类对象,他要去做儿子该做的事情,却因为你使用指针不同而让一个子类对象去做的事情:可能是儿子该做的,也可能是父亲该做的事情。这就与逻辑不符。

建议:
1.public继承意味着一种is-a关系:适用于父类对象的一件事情,也一定适用于子类对象
2.保持子类对象对父类接口的继承,但是不重定义父类非虚接口的·实现
3.如果需要根据对象真实类型表现出自己的行为,请使用多态,并实现子类自己的行为

大三学生一枚,文章均非抄袭或者模仿,均为原创,仅代表个人观点,如果文章有错误的地方,欢迎在下方提出,每条评论我都会去认真看并回复,同时感谢指正的前辈。

相关文章: