为啥我可以通过指针访问私有数据成员,我应该这样做吗?
Posted
技术标签:
【中文标题】为啥我可以通过指针访问私有数据成员,我应该这样做吗?【英文标题】:Why can I access private data members through pointers and should I do this?为什么我可以通过指针访问私有数据成员,我应该这样做吗? 【发布时间】:2014-06-21 23:59:50 【问题描述】:我刚刚发现我可以在 C++ 中做到这一点,它编译得很好(MinGW 和 VC++):
class A
private:
void doSth();
A* foo;
A* bar;
;
void A::doSth()
foo->bar;
foo
的成员字段 bar
是私有的。 为什么我可以访问它?我应该这样做吗?
【问题讨论】:
请张贴其隐私证明。 如果私有变量完全无法访问,那现在就不是很有用了..:) 如果它是非法的,你将无法对私人会员做任何事情。 +1。这是一个很好的问题,因为我可以看到指针如何将正在发生的事情与可见性混淆。 @Ben 也许 OP 喜欢 player。有什么关系?哎呀。 【参考方案1】:在 C++ 中,private
表示访问仅限于同一个类,而不是同一个对象实例。
【讨论】:
谢谢,我会尽快接受。我不知道访问修饰符是基于类的。认为它们是基于实例的。【参考方案2】:您还会注意到,在 A 的方法中,可以访问 A 的私有变量的其他实例。喜欢
A::baz(A& other)
other.bar; // legal
可见性是在类级别,而不是实例级别。
【讨论】:
为什么要添加另一个答案而不是编辑第一个答案? @luk32 因为第一个是错误的,这是不同的。我没有正确理解这个问题。 那么......为什么不编辑错误的呢?也许我没有看到待删除的内容。这很尴尬。 @djechlin 编辑您发布到正确答案的第一个答案没有帮助吗? @luk32 因为我认为将一个答案变形为完全不同的答案是愚蠢的。一方面,投票变得毫无意义。也许真正喜欢我明显错误答案的人不会喜欢我的正确答案。以上是关于为啥我可以通过指针访问私有数据成员,我应该这样做吗?的主要内容,如果未能解决你的问题,请参考以下文章