问题
有网友问:“c++中派生类B继承了一个基类A,那么相当于是B中的代码复制了A中的代码是吗?”
意思是:继承的好处,就是帮程序员省去复制粘贴已经实现的代码?
这就错大了!
南老师回答
有两类财富可以从基类继承而得。
第一种继承是派生类(新写的类)继承基类(原有的)的实现,是为 继承实现。意思是基类做了好多公共(适用面广,很多派生类都需要)功能。这种继承类似现实中的 儿子继承爸爸的财富。比如 思聪 同学。
第二种继承是派生类继承(并且要实现)基类的接口,称为继承接口。现实中的继承遗志吧。就是基类自己几乎什么都不实现,但偏偏约定了一大堆 目标 要求派生类必须实现,“谁不实现谁就不是我的儿子…” 。这种继承类似我和我爸。他有读名牌大学暴富的梦想,但一直要求我和我兄弟(都算子类)实现,甚至是子类的子类。
面向对象主要是使用第二种。但在C++语言这里,向来追求目标导向,实现手段不拘一格,怎么合适怎么来,而不是强求非用面向对象的模式来解决,所以实际代码仍然会并且也推荐大量使用第一种 。尽管会被个别语言酸 “富二代”,不靠自己努力之类的……但没有几个C++程序员会上这类当去追求所谓纯粹的什么什么。
但是,谁要说这是代码复制吧?我们还是要生气的。基于语言自带机制的功能复用,怎么可以称为财富复制呢?使用Ctrl C/ Ctrl V。思聪class只是直接使用王爸爸class的钱,并没有复制,相反,还亏了四个小目标。
有人采访问王爸爸人生至今最大遗憾是什么?他想了想说:当年只生了一个。
让基于财产继承的派生类更多一些吧!