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 指针,就禁止了。
想了一下,解决方案是。
很坏味道。不过也不太所谓了。
Comments
Posted by: newman | (32) February 9, 2014 04:30 AM
Posted by: wader | (31) June 13, 2011 05:37 PM
Posted by: az | (30) April 3, 2010 12:04 AM
Posted by: 桂林旅游去吃屎 | (29) March 26, 2010 04:42 PM
Posted by: 桂林旅游去吃屎 | (28) March 26, 2010 04:41 PM
Posted by: 桂林旅游去吃屎 | (27) March 26, 2010 04:41 PM
Posted by: 桂林旅行 | (26) March 26, 2010 02:03 PM
Posted by: sjinny | (25) March 26, 2010 12:04 AM
Posted by: mike | (24) March 24, 2010 09:32 PM
Posted by: mike | (23) March 24, 2010 09:27 PM
Posted by: qaqz111 | (22) March 24, 2010 08:38 PM
Posted by: mike | (21) March 24, 2010 05:03 PM
Posted by: wirse | (20) March 21, 2010 12:05 PM
Posted by: dwing | (19) March 20, 2010 03:35 PM
Posted by: 影子yellow | (18) March 19, 2010 05:24 PM
Posted by: 影子yellow | (17) March 19, 2010 05:22 PM
Posted by: Gyang | (16) March 19, 2010 11:21 AM
Posted by: 亮哥 | (15) March 18, 2010 07:36 PM
Posted by: yue169 | (14) March 18, 2010 06:28 PM
Posted by: flair | (13) March 18, 2010 06:15 PM
Posted by: Cheney | (12) March 18, 2010 01:22 PM
Posted by: ameidai | (11) March 18, 2010 01:06 PM
Posted by: 亮哥 | (10) March 18, 2010 01:00 AM
Posted by: 亮哥 | (9) March 18, 2010 12:43 AM
Posted by: cloud | (8) March 17, 2010 12:36 PM
Posted by: zealous | (7) March 17, 2010 10:57 AM
Posted by: zealous | (6) March 17, 2010 10:52 AM
Posted by: 涛 | (5) March 17, 2010 10:46 AM
Posted by: dwing | (4) March 17, 2010 10:33 AM
Posted by: 桂林旅游 | (3) March 17, 2010 09:21 AM
Posted by: acumon | (2) March 17, 2010 09:12 AM
Posted by: acumon | (1) March 17, 2010 09:06 AM