加载中...
C++的继承就是复制吗?
第1节:代码改善:一个“坑爹”的文字类冒险游戏
第2节:在禁止多重继承的情况下,如何设计“直立智慧猩猩”类?
第3节:C++多线程代码中的“乱序”执行现象
第4节:C++中函数指针有什么作用呢?
第5节:为什么我用c++写的游戏那么简陋?
第6节:多线程读写socket导致的数据混乱的原因是什么?
第7节:WebSocket 是什么原理?为什么可以实现持久连接?
第8节:怎样在c++中实现instanceof?
第9节:一个函数多处 return 是好风格吗?
第10节:C++中虚函数相比非虚函数的优势
第11节:为什么 C::C::C::C::foo() 能编译成功?
第12节:如何静态反射C++枚举的名字
第13节:看C++大叔如何拥 java 妹子入怀……
第14节:坨——理解递归实现“汉诺塔”代码的关键
第15节:C++编译器如何实现 const(常量)?
第16节:C++如何为断言加上消息
第17节:初学C++到什么水平,算是合格的初级开发工程师?
第18节:C++编程要避免使用单例模式吗?
第19节:学习C++要学boost库吗?
第20节:C++的继承就是复制吗?
第21节:C++构造函数失败,如何中止创建对象?
第22节:C++学完多线程后,学什么呢?
第23节:string_view 适合用做函数的返回值类型吗?
第24节:为指针取别名,为何影响const属性?
第25节:std::enable_shared_from_this 的存在意义?
课文封面

有网友问:“c++中派生类B继承了一个基类A,那么相当于是B中的代码复制了A中的代码是吗?”
意思是:继承的好处,就是帮程序员省去复制粘贴已经实现的代码?
这可就错大了!

问题

有网友问:“c++中派生类B继承了一个基类A,那么相当于是B中的代码复制了A中的代码是吗?”
意思是:继承的好处,就是帮程序员省去复制粘贴已经实现的代码?
这就错大了!

南老师回答

有两类财富可以从基类继承而得。

第一种继承是派生类(新写的类)继承基类(原有的)的实现,是为 继承实现。意思是基类做了好多公共(适用面广,很多派生类都需要)功能。这种继承类似现实中的 儿子继承爸爸的财富。比如 思聪 同学。

第二种继承是派生类继承(并且要实现)基类的接口,称为继承接口。现实中的继承遗志吧。就是基类自己几乎什么都不实现,但偏偏约定了一大堆 目标 要求派生类必须实现,“谁不实现谁就不是我的儿子…” 。这种继承类似我和我爸。他有读名牌大学暴富的梦想,但一直要求我和我兄弟(都算子类)实现,甚至是子类的子类。

面向对象主要是使用第二种。但在C++语言这里,向来追求目标导向,实现手段不拘一格,怎么合适怎么来,而不是强求非用面向对象的模式来解决,所以实际代码仍然会并且也推荐大量使用第一种 。尽管会被个别语言酸 “富二代”,不靠自己努力之类的……但没有几个C++程序员会上这类当去追求所谓纯粹的什么什么。

但是,谁要说这是代码复制吧?我们还是要生气的。基于语言自带机制的功能复用,怎么可以称为财富复制呢?使用Ctrl C/ Ctrl V。思聪class只是直接使用王爸爸class的钱,并没有复制,相反,还亏了四个小目标。

有人采访问王爸爸人生至今最大遗憾是什么?他想了想说:当年只生了一个。

让基于财产继承的派生类更多一些吧!