【发布时间】:2013-01-02 05:20:46
【问题描述】:
我是第一次做一个大型项目。我有很多类,其中一些有公共变量,一些有带有 setter 和 getter 方法的私有变量,同样有两种类型。
我决定重写这段代码,主要只使用一种类型。但我不知道我应该使用哪个(仅用于同一对象中的方法的变量始终是私有的,不是这个问题的主题)。
我知道公共和私人意味着什么的理论,但在现实世界中使用的是什么,为什么?
【问题讨论】:
-
OO 的答案是使用私有变量。但是 C++ 中的可见性模型非常糟糕(在 C++11 中稍微少一点),如果你不给它们起丑化的名字,私有成员可能会导致非常令人惊讶的问题。
-
@MarcGlisse Wut?
-
几乎完全是一个骗局:stackoverflow.com/questions/1596432/…
-
在 C++11 之前,如果您在具有私有 x 成员的类型上调用另一个重载,则在其签名中使用 T::x 进行重载会导致硬错误。但即使在 C++11 中,您仍然会遇到以下问题:gcc.gnu.org/bugzilla/show_bug.cgi?id=55713 编译器坚持给出错误,而不是忽略私有成员(或基)。当然还有更糟糕的例子。听说有几个委员会成员称 C++ 访问控制被破坏,尽管我认为这可能是出于不同的原因。
标签: c++ oop abstraction getter-setter data-access