《C++的十万个为什么》:[56]使用多态还是不使用多态——一枚硬币必然有两个面
http://chenlq.net/dev/cpp-why/56-use-polymorphic-or-not-to-use-polymorphism-the-eternal-war-between-time-and-space.html
Q:
在知乎上,一位同学问到这样一个关于多态的问题:
在流行的C++教科书中,对多态有两种截然不同的说法,请谈谈您对这两种观点的看法?
在流行的C++教科书中,对多态有两种截然不同的说法,一种认为:“因为多态性增加了一些数据存储和执行指令的代价,所以能不多态最好。”另一种认为:“这是类机制中最关键的一个方面。只要用的好,它就能够成为面向对象程序设计的基石”(引号中的文字均引自原文)你赞同哪种说法,论述你的理解。
PS:是期末C++的一道试题
A:
这个问题,看是一个技术问题,但是已经有点哲学问题的意味了。其本质上,这就是一个事物的两个方面,这就像一枚硬币,必然有两个面,看你如何取舍和平衡。
任何事物,都有其两面性,不能相互割裂地看,就像砒霜,用好了可以治病,用坏了可以杀人
多态在这里也是同样的道理,多态用好了,可以提高程序的灵活性,可以应对需求的不断变化,而如果用坏了,也会在一定程度上降低程序的性能。掌握一个合适的度是关键。
那么,怎样才是合适的度呢?
这个就很不好说了,并没有一个明确的标准,这一点往往靠自己的经验来决定(这就是为什么经验这么值钱)。但是,可以有一个简单的粗略的判断标准:对你的程序来说,是性能更加重要,还是灵活性扩展性更加重要?如果是前者,尽量少用,如果是后者,该用的时候就用,大不了多加几块内存,换一块快一些的CPU,硬件资源要时间便宜得多(一寸光阴一寸金,而一块内存才多少钱啊)
总结起来,这里也运用了我们党取得革命胜利的法宝:理论联系实际,因地制宜。闹革命需要这一法宝,编程也需要。(唉,这年头,编程都离不开哲学)