C++中的protected |
当我还在用 C++ 做重要开发语言的最终几年,我已经不大用 protected 了 。从箱底翻出曾经钟爱的一本书:《C++语言的设计和 演变》,中文版 235 页这样记录: “ ... Mark Linton 顺便到我的办公室来了一下,提出了一个使人印象深刻的 申请,要求提供第三个操纵 品位,以便能 支撑斯坦福大学正在开发的 Interviews 库中所 使用的 格调 。我们一同 推敲,制造出单词 protected 以 示意类里的一些成员,...” “... Mark 是 Interviews 的重要设计师 。他的有说服力的 辩论是基于实际 教训和来自 实在代码的实例 。...” “...大概五年之后,Mark 在 Interviews 里禁止了 protected 数据成员,由于它们已经变成许多程序 舛误的 起源...” 我不喜爱 protected ,然而今日,我间或用一下 C++ 时,不再有那么多洁癖 。反正很难用 C++ 做出 巩固的设计,那么,爱怎么用就怎么用吧 。 要害是别用 C++ 做特殊核心的东西就成了 。 今日,碰到一个跟 protected 有关的问题,小郁闷了一下 。感觉 可以写写 。这个倒是个 根本问题,貌似以往很 相熟 。毕竟众多年不碰了,对 C++ 语法有点 生僻 。 小时候,我一度 认为这样的代码是不合法的 。
由于我 担心在 foo::foobar 中不能 拜访 f 的私有成员变量 a 。 后来我清楚了,所谓私有,是针对类的,而不是具体的对象 。 然而今日碰到另一个问题,让我愣了一下 。
这次,在 foobar::bar 里, 拜访 this 的 a 成员同意,但 f 的 a 成员却被禁止了 。 由于 foo::a 对 foobar 是 protected 的,foobar 的成员函数 可以 拜访自己的 a ,然而关于 foo 指针,就禁止了 。 想了一下,解决 方案是 。
很坏滋味 。不过也不太所谓了 。 |