Sea Yellow's Website

C++的OOP真的了不起

最近又把让了好久没看的《C++ Primer》拿起来看,刚好打开OOP的一章,本来以为又是普通的一个章节,没想到这一章真的太热闹了。OOP的设计理念非常的自然而巧妙。之前我一直觉得C++很复杂,很多细节绕来绕去的,但是看到这一章(还没看完呢),我有很多疑惑都解决了。比如friend、static_cast之类的东西。《C++ Primer》其实越看到后面越感觉废话多,老是同一个话题变着花样说来说去,而国内的教科书基本上一个东西就一句话带过,然后全是习题。但是我发现看《C++ Primer》虽然会把一个东西翻来覆去的讲,每次讲我都有新的一些收获。我的理解是,有很多概念要读懂不是很难,但是要明白其中的内涵,也就是各种历史教训和设计哲学,却不是通过国内教科书一两句话就能说得清楚的。我举个例子,比如下面这个:

其实它里面没有讲到什么全新的概念,像public、private、protected在前文早就被提到无数遍了,傻子都知道它们是怎么用的。但是为什么这里还要再提一遍呢?我看完之后顿时Aha了起来。原来虽然之前我也知道这三个关键字的用法,但是不理解它们深层次的含义。我用一个有趣的诠释来解释他们:
首先一个class的可能有三类user(访问等级从高到低排名):

  1. implementor(直接动member function和friend function的代码)
  2. 使用derived class去访问这个class的人(derived class的implementor)
  3. 非implementor。从外部去使用这个class(比如用cout输出文本)
这三类user我用序号标了数字,那么: 啊哈,现在三个关键字都被自然地统一起来了。

想当年我学C#的时候在网上到处乱找资料,怎么也没搞懂这三个关键字,也难怪,因为那时候我连继承都知之甚少,又没有好书可以看。